
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
egg-graphql-waynechu
Advanced tools
GraphQL使用 Schema 来描述数据,并通过制定和实现 GraphQL 规范定义了支持 Schema 查询的 DSQL (Domain Specific Query Language,领域特定查询语言,由 FACEBOOK 提出。

传统 web 应用通过开发服务给客户端提供接口是很常见的场景。而当需求或数据发生变化时,应用需要修改或者重新创建新的接口。长此以后,会造成服务器代码的不断增长,接口内部逻辑复杂难以维护。而 GraphQL 则通过以下特性解决这个问题:
也就是说,通过以上的三个特性,当需求发生变化,客户端只需要编写能满足新需求的查询结构,如果服务端能提供的数据满足需求,服务端代码几乎不需要做任何的修改。
目前 egg-graphql 已经完全支持在 egg 中使用 GraphQL 查询语法,可直接查看文末参考链接,下文为插件设计。
我们会使用 GraphQL Tools配合 eggjs 完成 GraphQL 服务的搭建。 GraphQL Tools 建立了一种 GraphQL-first 的开发哲学,主要体现在以下三个方面:
我们也会使用 GraphQL Server 来完成 GraphQL 查询语言 DSQL 的解析。
同时我们会使用 dataloader 来优化数据缓存。(例子可见 test/fixtures/app/graphql-app 目录)
GraphQl Tools 新增了对自定义 directive 的支持,通过 directive 我们可以实现一些切面相关的事情:权限、缓存等。(例子可见 test/fixtures/app/graphql-app/app/graphql/directives 目录)
这些我们都会集成到 egg-graphql 插件中。
安装对应的依赖 [egg-graphql] :
$ npm i --save egg-graphql-waynechu
开启插件:
// config/plugin.js
exports.graphql = {
enable: true,
package: 'egg-graphql-waynechu',
};
在 config/config.${env}.js 配置提供 graphql 的路由。
// config/config.${env}.js
exports.graphql = {
router: '/graphql',
// 是否加载到 app 上,默认开启
app: true,
// 是否加载到 agent 上,默认关闭
agent: false,
// 是否加载开发者工具 graphiql, 默认开启。路由同 router 字段。使用浏览器打开该可见。
graphiql: true,
//是否设置默认的Query和Mutation, 默认关闭
defaultEmptySchema:true,
// graphQL 路由前的拦截器
onPreGraphQL: function* (ctx) {},
// 开发工具 graphiQL 路由前的拦截器,建议用于做权限操作(如只提供开发者使用)
onPreGraphiQL: function* (ctx) {},
// apollo server的透传参数,参考[文档](https://www.apollographql.com/docs/apollo-server/api/apollo-server/#parameters)
apolloServerOptions: {
rootValue,
formatError,
formatResponse,
mocks,
schemaDirectives,
introspection,
playground,
debug,
validationRules,
tracing,
cacheControl,
subscriptions,
engine,
persistedQueries,
cors,
}
};
// 添加中间件拦截请求
exports.middleware = [ 'graphql' ];
请将 graphql 相关逻辑放到 app/graphql 下,请参考测试用例,里面有 connector/schema 的目录结构, 以及 dataloader 的使用。
目录结构如下
.
├── app
│ ├── graphql
│ │ ├── common
│ │ │ └── directive.js // 自定义directive
│ │ ├── project
│ │ │ └── schema.graphql
│ │ ├── schemaDirectives
│ │ │ └── schemaDirective.js // 自定义 SchemaDirective
│ │ │
│ │ ├── user // 一个graphql模型
│ │ │ ├── connector.js
│ │ │ ├── resolver.js
│ │ │ └── schema.graphql
│ │ ├── group //自定义模型组目录
│ │ │ ├── framework // 一个graphql模型
│ │ │ │ ├── connector.js
│ │ │ │ ├── resolver.js
│ │ │ │ └── schema.graphql
│ │ │ └── workspace // 一个graphql模型
│ │ │ ├── connector.js
│ │ │ ├── resolver.js
│ │ │ └── schema.graphql
│ ├── model
│ │ └── user.js
│ ├── public
│ └── router.js
MIT
FAQs
egg graphql plugin
We found that egg-graphql-waynechu demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.