egg
egg copied to clipboard
建议egg-graphql提供分模块的功能
配置跟以前不变,使用方法就是在app/graphql 增加了一层用来分区各个模块,比如:
// 配置
exports.graphql = {
router: '/graphql',
// 是否加载到 app 上,默认开启
app: true,
// 是否加载到 agent 上,默认关闭
agent: false,
// 是否加载开发者工具 graphiql, 默认开启。路由同 router 字段。使用浏览器打开该可见。
graphiql: true,
// graphQL 路由前的拦截器
onPreGraphQL: function* (ctx) {},
// 开发工具 graphiQL 路由前的拦截器,建议用于做权限操作(如只提供开发者使用)
onPreGraphiQL: function* (ctx) {},
};
目录结构如下
.
├── app
│ ├── graphql
| | ├── moduleA
| | └── moduleB
| | ├── common
| | | └── directive.js // 自定义directive
│ │ ├── project
│ │ │ └── schema.graphql
│ │ └── user // 一个graphql模型
│ │ ├── connector.js
│ │ ├── resolver.js
│ │ └── schema.graphql
│ ├── model
│ │ └── user.js
│ ├── public
│ └── router.js
然后访问的时候,就是host/graphql/moduleA
这样来访问,
看apolloserver文档没发现有提供什么方法,目前实现思路大概就是实例化多个apolloserver传入不同的path,挂载不同的schema
个人感觉,graphql设计的就是一个Uri接受所有请求。有需求可以自己改造。但是应该不是通用需求。改成这样的话grahpiql啥的都用不了了。
@nigelvon 可以加个参数来表示是否开启。。。 grahpiql这些照样能用的,这个不用担心