/egg-graphql-apollo

egg plugin for graphql.

Primary LanguageJavaScriptMIT LicenseMIT

egg-graphql-apollo

npm travis-ci Coverage Status npm

插件参考了 egg-graphql,并与 egg-graphql 配置保持一致。不同的地方是文件结构定义和编写方式。

egg-graphql-apollo 推荐 graphql 模型定义及 resolvers 等相关逻辑在 app/graphql 目录中实现。

例如:

// app/graphql/user_info.js

exports.typeDef = `
type UserInfo {
  id: Int!
  name: String!
  createdAt: Date! @date(format: "YYYY-MM-DD")
}
`;

exports.resolver = {
  Query: {
    user(root, { id }, ctx) {
      return ctx.service.userInfo.fetchById(id);
    },
  },
};

exports.directiveResolver = {};

exports.schemaDirective = {};

每个 js 文件输出可选 typeDefresolverdirectiveResolverschemaDirective,具体见测试用例,API: graphql-tools。这样做的好处是业务归类清晰、graphql schema 可组合。

你也可以编写 .graphql 文件,插件会加载并组合它们。

安装

$ npm i egg-graphql-apollo

config/plugin.js 开启插件:

exports.graphql = {
  package: 'egg-graphql-apollo',
};

config/config.${env}.js 配置 graphql 的路由。

// config/config.${env}.js
exports.graphql = {
  router: '/graphql',
  graphiql: true,
  onPreGraphQL: async (ctx) => {},
  onPreGraphiQL: async (ctx) => {},
};

使用方式

请参考测试用例的目录结构, 以及 dataloader 的使用。

参考项目

协议

MIT