初始化项目

创建 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 界面

测试 GraphQL 服务

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

测试 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");

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

返回数据的查询

相关资源

Koa + GraphQL 示例的更多相关文章

  1. 前端从零开始学习Graphql

    学习本姿势需要电脑装有node,vue-cli相关环境,以及要有node,express,koa,vue相关基础 本文相关demo的github地址: node服务:https://github.co ...

  2. 使用Hot Chocolate和.NET 6构建GraphQL应用(1)——GraphQL及示例项目介绍

    系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 前言 这篇文章是这个系列的第一篇,我们会简单地讨论一下GraphQL,然后介绍一下这个系列将会使用的示例项目. 关 ...

  3. koa2+koa-views示例

    app.js var Koa = require('koa') var fs = require('fs') var path = require('path') var koaStaticPlus ...

  4. graphql 新API 开发方式

    我们知道 GraphQL 使用 Schema 来描述数据,并通过制定和实现 GraphQL 规范 定义了支持 Schema 查询的 DSQL (Domain Specific Query Langua ...

  5. 深入探析koa之异步回调处理篇

    在上一篇中我们梳理了koa当中中间件的洋葱模型执行原理,并实现了一个可以让洋葱模型自动跑起来的流程管理函数.这一篇,我们再来研究一下koa当中异步回调同步化写法的原理,同样的,我们也会实现一个管理函数 ...

  6. [转] Node.js 服务端实践之 GraphQL 初探

    https://medium.com/the-graphqlhub/your-first-graphql-server-3c766ab4f0a2#.n88wyan4e 0.问题来了 DT 时代,各种业 ...

  7. 深入浅出Koa

    深入浅出Koa(1):生成器和Thunk函数 Koa是个小而美的Node.js web框架,它由Express的原班人马打造的, 致力于以一种现代化开发的方式构建web应用. 通过这个系列,你将能够理 ...

  8. 我的前端故事----我为什么用GraphQL

    背景 今年我在做一个有关商户的app,这是一个包含商户从入网到审核.从驳回提交到入网维护的完整的生命周期线下推广人员使用的客户端软件,但故事并没有这么简单... 疑问 随着app的逐渐完善,遇到的问题 ...

  9. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

随机推荐

  1. PC端视频播放器

    视频播放器:Potplayer 它是一款纯净的.无广告.极速

  2. Ubuntu16.04OPENGL初体验

    由于工作项目需要开始接触 OPENGL ,进行图像处理与可视化方面软件的开发.之前完全没有学习过相关知识,现在才知道原来有些 3D 图像是通过 OpenGL/Direct3D 等编程接口来做的. 市面 ...

  3. ycsb 测试Hbase性能

    下载 github:https://github.com/brianfrankcooper/YCSB/releases/tag/0.10.0 wget https://github.com/brian ...

  4. 浏览器及Windows常用快捷键汇总

    浏览器常用快捷键: F5 刷新 Ctrl+N 打开新窗口 Ctrl+T 打开新标签 Ctrl +  O  打开浏览器的时候打开文件 Ctrl+Shift+N 隐身模式打开窗口 F2 F3 切换  Ct ...

  5. 腾讯短信+SpringBoot+Redis实现注册逻辑

    使用redis做缓存实现用户的注册功能: 异步请求发送短信,给 发送短信的按钮 绑定异步事件 调用发送短信逻辑发送短信 缓存 key1:验证码 缓存 key2:短信发送时刻的时间 用户提交表单 包含用 ...

  6. SpringBoot系列——Filter 过滤器

    前言 本文记录一下在SpringBoot项目中是如何使用Filter过滤器 代码.测试 Filter过滤器是servlet包下面的东西,因此我们不需要再额外引包 方法一 直接实现Filter接口,并使 ...

  7. Python Web(二)

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.Django-debug-toolbar django-debug-toolbar 是一组可配置的面板,可显示 ...

  8. google跟踪代码管理器gtm无法给相同class元素绑定click事件埋点解决

    Google 跟踪代码管理器是一个跟踪代码管理系统 (TMS),可以帮助您快速轻松地更新网站或移动应用上的跟踪代码及相关代码段(统称为“代码”).将一小段跟踪代码管理器代码添加到项目后,您可以通过网页 ...

  9. 【单条记录锁】select single for update

    示例: DATA: wa_t001 type t001. select single for update * into wa_t001 from t001 where bukrs = '1000'. ...

  10. SAP OB52会计年度变式

    Var.(Posting Period Variant) 记帐区间变式,每个公司代码对应一个记帐期间变式,多个公司代码可以使用一个相同的记帐期间变式 A(Performance Assistant) ...