Egg.js 笔记系列
继上上篇撸完了简易版的阿里云 CS 控制台,用 GraphQL 继续武装一番~
1. 安装&配置
1.1 安装插件
- yarn add egg - graphql
1.2 开启插件
- // {rootDir}/config/plugin.js
- 'use 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}/graphql
- exports.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.graphql
- type Query {
- docker: Docker
- }
resolver
- 'use strict';
- module.exports = {
- Query: {
- docker(root, params, ctx) {
- return [];
- },
- },
- };
2.3 Docker
schema
- // docker/schema.graphql
- type 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.js
- 'use 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. 链接
来源: https://juejin.im/entry/5a01a16cf265da430b7aa72c