zoukankan      html  css  js  c++  java
  • Koa + GraphQL 示例

    初始化项目

    创建 graphql-example 文件夹进入后初始化一个 package.json 文件。

    $ mkdir graphql-example && cd $_
    $ yarn init -y

    安装依赖

    使用 koa-graphql 配合 koa-mount 两个 npm 模块来使用 GraphQL。同时需要安装 graphql 模块来创建需要使用的 schema。

    $ yarn add koa graphql koa-graphql koa-mount

    server

    安装 koa 后,创建 server.js 实现一个简单的服务端。

    server.js

    const Koa = require("koa");
    const app = new Koa();
    

    app.use(async ctx => {
    ctx.body = "Hello World";
    });

    app.listen(3000);
    console.log("server started at http://localhost:3000");

    通过 Node.js 启动后便可访问到页面了。

    $ node server.js
    server started at http://localhost:3000

    创建 schema

    GraphQL 需要一个 schema 来初始化,创建 graphql 目录并在其中创建 schema.js 文件,

    $ mkdir graphql
    $ touch graphql/schema.js

    schema.js

    const { buildSchema } = require('graphql');
    

    const schema = buildSchema(</span></span> <span class="pl-s"> type Query {</span> <span class="pl-s"> hello: String</span> <span class="pl-s"> }</span> <span class="pl-s"><span class="pl-pds">);

    module.exports = schema;

    启动 GraphQL 服务

    将上面的 schema 传入 koa-graphql 然后通过 koa-mount 将其作为中间件启动,便可开启 GraphQL 服务。

    server.js

    const Koa = require("koa");
    const mount = require("koa-mount");
    const graphqlHTTP = require("koa-graphql");
    const schema = require("./graphql/schema");
    

    const app = new Koa();

    app.use(
    mount(
    "/graphql",
    graphqlHTTP({
    schema: schema,
    graphiql: true
    })
    )
    );

    app.listen(3000);
    console.log("server started at http://localhost:3000");

    再次启动 server.js 并访问 http://localhost:3000/graphql 可看到一个可视化的 GraphQL 界面。该界面为 GraphQL 内置的 Graphiql 工具用于查询的调试。

    Graphiql 界面

    Graphiql 界面

    测试 GraphQL 服务

    前面定义的 schema 中包含一个 hello 字段,通过在前面的 Graphiql 中编辑查询可请求该字段。

    测试 Query

    测试 Query

    可以看到返回的数据为 null,这是因为我们还没有为该字段定义 resolver,即告诉 GraphQL 如何以及从哪里返回该数据。

    添加 resolver

    graphql 目录创建 resolver.js 文件,为 hello 字段指定数据的返回逻辑。

    graphql/resolver.js

    module.exports = {
      hello: () => "Hello world!"
    };

    更新我们创建 GraphQL 服务的代码,将 resolver 传入:

    server.js

    const Koa = require("koa");
    const mount = require("koa-mount");
    const graphqlHTTP = require("koa-graphql");
    const schema = require("./graphql/schema");
    + const root = require("./graphql/resolver");
    

    const app = new Koa();

    app.use(
    mount(
    "/graphql",
    graphqlHTTP({
    schema: schema,
    + rootValue: root,
    graphiql: true
    })
    )
    );

    app.listen(3000);
    console.log("server started at http://localhost:3000");

    再次启动服务并执行查询,能够看到返回了正确的数据。

    返回数据的查询

    返回数据的查询

    相关资源

  • 相关阅读:
    oracle数据库连接不上
    Oracle的regexp_instr函数简单用法
    Oracle中dbms_random.string 的用法
    oracle 简单输出语句与赋值
    oracle中sequence(自增序号)的用法
    oracle 函数的返回值与out参数
    SQL%ROWCOUNT作用
    100多个基础常用JS函数和语法集合大全
    题解【AcWing272】最长公共上升子序列
    题解【POJ1062】昂贵的聘礼
  • 原文地址:https://www.cnblogs.com/Wayou/p/koa_graphql_example.html
Copyright © 2011-2022 走看看