在使用 Node.js 构建 Web 应用的过程中,GraphQL 已经成为了一个流行的数据查询语言和 API 设计理念。在 Egg.js 应用中使用 GraphQL 可以帮助我们快速搭建 API,方便前后端协作和数据交互,同时还能提高开发效率和代码质量。而 npm 包 only-egg-graphql 则为我们提供了一个简便易用的 Egg.js 扩展来配置 GraphQL。
安装
只需一条简单的指令即可完成安装:
npm install only-egg-graphql graphql apollo-server-koa -S
上述指令中,graphql 和 apollo-server-koa 是 only-egg-graphql 依赖的第三方 npm 包。
配置
Egg.js 应用的配置都保存在 config
目录下的 config.${env}.js
文件中。只需在其中添加以下内容即可启用 only-egg-graphql:
// config/config.${env}.js config.graphql = { router: '/graphql', app: true, apolloServerOptions: { tracing: true } };
上述代码中,我们为 Egg.js 应用设置了一个 GraphQL API 路由/graphql
,同时将配置项 app
设置为 true
,意味着应用程序将加载这个 middleware。我们还使用了 Apollo Server 提供的配置选项 tracing
,启用了性能跟踪特性。
使用
首先,我们需要定义和配置我们的 GraphQL schema。通常,schema 包含一些类型定义和字段的解析器函数。以下示例中,我们定义了一个 User
类型和 Query
类型,并通过一个简单的数组来做为数据源。
-- -------------------- ---- ------- -- --------------------------- ---------------- - - ---- ----- - ------------------- ----- ---- - ---- ---- - ------- --- --------- ------ ---- --- - -- ----------------- - - ------ - ----- -------------- - ------ -- - ----- ----- - - - ------- ---- --------- -------- ---- --- -- - ------- ---- --------- ------ ---- --- -- - ------- ---- --------- -------- ---- --- -- -- ------ ----------------- -- ----------- --- -------- -- -- --
接下来,我们需要告诉 only-egg-graphql 在哪里可以找到我们的 schema。在应用的 app.js
中导入 only-egg-graphql
,并注册我们的 GraphQL schema 模块。
-- -------------------- ---- ------- -- ------ -------------- - ----- -- - -- ---------------- -- -------------- --- -------- - --------------------- -- -- - -- ---- ------ ------- -- ----------- ----------- ----- -------------------------------- --- - -------- -------------------------- ----------------------------- ----- -------------------------------------- -- ----- ------- ------- --- -- -- --
这里我们使用 registerModules
方法为 Egg.js 应用注册了一个名为user
的 GraphQL 模块。同时只需按照相似的方式注册其他需要的模块即可。
最后,我们可以利用任意 GraphQL 客户端工具来测试我们的 GraphQL API,例如 curl
或者 GraphQL Playground。以下示例代码给出了一种基于 curl
的测试方法:
# 发送一个 GET 请求到我们配置的 API 路由 '/graphql',并查询 id 为 1 的用户信息 curl http://localhost:7001/graphql -G --data-urlencode 'query={getUserById(userId: "1") {username, age}}'
结论
通过这个简单的 npm 包 only-egg-graphql,我们已经为我们的 Egg.js 应用实现了一个完整的 GraphQL API。我们可以使用任意 GraphQL 客户端工具来定义查询和变更操作,同时也可以使用很多其他优秀工具配合开发,例如 GraphQL Playground、Apollo Client 等。当然,合理地使用 only-egg-graphql 还可以帮助我们优化性能和增强安全性,这也是我们必须时刻优化和完善我们的应用程序的重要过程之一。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600579a381e8991b448eb305