Node.js 是一种非常流行的服务器端 JavaScript 运行环境,而 Koa 是一个受欢迎的 Web 框架,它被设计成轻量、灵活和高效的,适用于开发 Web 应用程序和 API。在很多项目中,我们可能需要通过数据库进行数据的 CRUD 操作,而 GraphQL 可以作为一个优秀的 API 查询语言,让我们更方便地进行这样的操作。
在本文中,我们将讨论如何在 Koa 中集成 GraphQL,以及如何使用 GraphQL 进行数据查询。
准备工作
在开始之前,您需要确保已经安装并配置好了以下工具:
- Node.js:在 官方网站 下载最新版
- NPM:在终端运行
npm install npm@latest -g
进行更新 - Koa:在终端运行
npm install koa koa-bodyparser koa-graphql graphql
进行安装 - MongoDB:在 官方网站 下载并安装
创建服务器
首先,我们需要创建一个 Koa 服务器,以准备接受 GraphQL 查询的请求。在您的项目文件夹中创建一个 server.js
文件,并添加以下代码:
-- -------------------- ---- ------- ----- --- - --------------- ----- ---------- - -------------------------- ----- - ------------- --- - - ----------------------------- ----- -------- - ---- ---- ----- - ------ ------ - -- ----- --------- - - ------ - ------ -- -- ------- --------- - -- ----- ------ - --- -------------- --------- --------- --- ----- --- - --- ------ ---------------------- ------------------------ --- --- ---------------- -- -- - -------------------- ------ ------- -- -------------------------------- ---
在上面的代码中,我们首先引入了所需的依赖项 Koa
、koa-bodyparser
、ApolloServer
和 gql
,在 typeDefs
中定义了一个名为 Query
的类型,该类型具有一个名为 hello
的字段,它返回一个字符串 "Hello, GraphQL!"
。在 resolvers
中,我们实现了这个查询的逻辑。
创建了服务器和 ApolloServer 实例后,我们使用 applyMiddleware
方法将 ApolloServer 实例集成到 Koa 应用程序中,并在 app.listen
方法中添加一个回调函数,通知我们服务器已经成功启动。
现在我们已经可以启动服务器并访问 http://localhost:4000/graphql
,应该会看到 GraphQL Playground 查看器。您可以在 “query” 标签中输入以下查询语句,执行后应该会返回字符串 “Hello, GraphQL!”:
query { hello }
集成 MongoDB
现在,我们需要使我们的服务器连接到 MongoDB 数据库,以便查询和操作数据记录。在 server.js
文件中添加以下代码:
-- -------------------- ---- ------- ----- --- - --------------- ----- ---------- - -------------------------- ----- - ------------- --- - - ----------------------------- ----- - ----------- - - ------------------- ----- -------- - ---- ---- ---- - --- --- ----- ------- ---- ---- - ---- ----- - ----------- ----- ---- ------------ ------ - ----- --------------- - ----- ------- ---- ---- - ---- -------- - ----------------- ------------------ ---- -------------- ---- ------ ------------------ ---- -------------- ----- ---- - -- ----- --------- - - ------ - ----- --------------- - -- -- ---- - ------ ----- ------------------------------------ ---- --- ------------------------ --- -- ----- ------------------- ----- ---- - ------ ----- -------------------------------------------- - -- --------- - ----- ------------------ - ----- -- ---- - ----- ------ - ----- -------------------------------------------- ------ - --- ----------------------------- -------- -- -- ----- ------------------ - --- ----- -- ---- - ----- ------ - ----- --------------------------------------------- ---- --- ------------------------ -- - ----- ----- -- - --------------- ----- --- ------ ------------- -- ----- ------------------ - -- -- ---- - ------ ----- --------------------------------------------- ---- --- ------------------------ --- - - -- ----- ----------- - ----- -- -- - ----- ------ - ----- ------------------------------------------------ - ---------------- ---- --- ----- -- - ------------------- ----- ------ - --- -------------- --------- ---------- -------- - -- - --- ----- --- - --- ------ ---------------------- ------------------------ --- --- ---------------- -- -- - -------------------- ------ ------- -- -------------------------------- --- -- --------------
在上面的代码中,我们首先引入了 MongoClient
,用于连接到 MongoDB 数据库。在 typeDefs
中,我们定义了一个名为 User
的类型,该类型包含 id
、name
和 age
字段,在 Query
中定义了 getUser
和 getAllUsers
查询。此外,我们还定义了一个 CreateUserInput
输入类型和三个有关用户的变异。
在 resolvers
中,我们实现了这些查询和变异的逻辑。在 startServer
函数中,我们连接到数据库并将 db
对象提供给 ApolloServer 实例的上下文中。由于我们使用了 MongoDB 的异步 API,因此我们为查询和变异函数添加了 async/await
关键字。
现在,我们可以在 http://localhost:4000/graphql
中执行以下查询和变异操作:
查询单个用户:
query { getUser(id: "5f54a37aeb18ae7850e935f5") { id name age } }
查询所有用户:
query { getAllUsers { id name age } }
创建新用户:
mutation { createUser(input: { name: "John Doe", age: 30 }) { id name age } }
更新用户信息:
mutation { updateUser(id: "5f54a89f0156e5006518d517", input: { name: "Jane Doe", age: 25 }) { id name age } }
删除用户:
mutation { deleteUser(id: "5f54a89f0156e5006518d517") { id name age } }
总结
在本文中,我们学习了如何将 GraphQL 集成到 Koa 中,并通过连接 MongoDB 定义了查询和变异操作。在任何项目中,这些技术都有很大的作用,而且将它们集成在一起通常更简单、优雅且容易维护。希望本文对您有所帮助,在您的下一个项目中能够运用上这些技术!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648a8ea048841e98948af671