Egg.js 中 GraphQL 小試牛刀
Egg.js 筆記系列
繼上上篇擼完了簡易版的阿里雲 CS 控制台,用 GraphQL 繼續武裝一番~
1. 安裝&配置
1.1 安裝插件
yarn add egg-graphql
1.2 開啟插件
// {rootDir}/config/plugin.jsuse strict;// had enabled by egg// exports.static = true;exports.graphql = { enable: true, package: egg-graphql,};
1.3 配置插件
// {rootDir}/config/config.{env}.js// 載入中間件,使用訪問:http(s)://{host}:{port}/graphqlexports.middleware = [ graphql ];exports.graphql = { router: /graphql, // 是否載入到 app 上,默認開啟 app: true, // 是否載入到 agent 上,默認關閉 agent: false,};
2. 使用
2.1 基本結構
// {rootDir}/app/graphql.├── common│ ├── resolver.js│ ├── scalars│ │ └── date.js│ └── schema.graphql├── docker│ ├── connector.js│ ├── resolver.js│ └── schema.graphql└── query ├── resolver.js └── schema.graphql
2.2 Query
schema
// query/schema.graphqltype Query { docker: Docker}
resolver
use strict;module.exports = { Query: { docker(root, params, ctx) { return []; }, },};
2.3 Docker
schema
// docker/schema.graphqltype Docker { images(id: Int, limit: Int, offset: Int): [Image] clusters(name: String): [Cluster]}type Image { id: Int! namespace: String! region: String! name: String! repo_full_name: String! tags: [Tag]}type Tag { id: Int! digest: String! tag: String! pushed_at: Date! }type Cluster { id: Int! name: String! region: String! created_at: Date! # masterUrl: String! # ca: String! # key: String! # cert: String!}
resolver
// docker/resolver.jsuse strict;module.exports = { Docker: { images(parent, { id, limit, offset }, ctx) { return ctx.connector.docker.getImages(id, limit, offset); }, clusters(parent, { name }, ctx) { return ctx.connector.docker.getClusters(name); }, },};
嵌套結構下,第一個參數為上層的結果,Query 下為 root,Docker 下為上層的結果
3. 效果

4. 鏈接
- Egg.js+Antd 擼個簡易版阿里雲CS控制台?
- 在egg中使用GraphQL
- freebyron/egg-graphql-boilerplate
- eggjs/egg-graphql
推薦閱讀:
※Node.js 實現 Hot Reload
※Node應用內存泄漏分析方法論與實戰
※狼叔的2017年總結
※如何分析 Node.js 中的內存泄漏
※node學習的第一步
