egg icon indicating copy to clipboard operation
egg copied to clipboard

建议egg-graphql提供分模块的功能

Open yuu2lee4 opened this issue 6 years ago • 2 comments

配置跟以前不变,使用方法就是在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

yuu2lee4 avatar Sep 28 '18 07:09 yuu2lee4

个人感觉,graphql设计的就是一个Uri接受所有请求。有需求可以自己改造。但是应该不是通用需求。改成这样的话grahpiql啥的都用不了了。

nigelvon avatar Sep 29 '18 08:09 nigelvon

@nigelvon 可以加个参数来表示是否开启。。。 grahpiql这些照样能用的,这个不用担心

yuu2lee4 avatar Sep 29 '18 09:09 yuu2lee4