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. 链接