Koa 中集成 GraphQL 进行数据查询

阅读时长 8 分钟读完

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 文件,并添加以下代码:

-- -------------------- ---- -------
----- --- - ---------------
----- ---------- - --------------------------
----- - ------------- --- - - -----------------------------

----- -------- - ----
  ---- ----- -
    ------ ------
  -
--

----- --------- - -
  ------ -
    ------ -- -- ------- ---------
  -
--

----- ------ - --- -------------- --------- --------- ---

----- --- - --- ------
----------------------
------------------------ --- ---

---------------- -- -- -
  -------------------- ------ ------- -- --------------------------------
---

在上面的代码中,我们首先引入了所需的依赖项 Koakoa-bodyparserApolloServergql,在 typeDefs 中定义了一个名为 Query 的类型,该类型具有一个名为 hello 的字段,它返回一个字符串 "Hello, GraphQL!"。在 resolvers 中,我们实现了这个查询的逻辑。

创建了服务器和 ApolloServer 实例后,我们使用 applyMiddleware 方法将 ApolloServer 实例集成到 Koa 应用程序中,并在 app.listen 方法中添加一个回调函数,通知我们服务器已经成功启动。

现在我们已经可以启动服务器并访问 http://localhost:4000/graphql,应该会看到 GraphQL Playground 查看器。您可以在 “query” 标签中输入以下查询语句,执行后应该会返回字符串 “Hello, GraphQL!”:

集成 MongoDB

现在,我们需要使我们的服务器连接到 MongoDB 数据库,以便查询和操作数据记录。在 server.js 文件中添加以下代码:

-- -------------------- ---- -------
----- --- - ---------------
----- ---------- - --------------------------
----- - ------------- --- - - -----------------------------
----- - ----------- - - -------------------

----- -------- - ----
  ---- ---- -
    --- ---
    ----- -------
    ---- ----
  -

  ---- ----- -
    ----------- ----- ----
    ------------ ------
  -

  ----- --------------- -
    ----- -------
    ---- ----
  -

  ---- -------- -
    ----------------- ------------------ ----
    -------------- ---- ------ ------------------ ----
    -------------- ----- ----
  -
--

----- --------- - -
  ------ -
    ----- --------------- - -- -- ---- -
      ------ ----- ------------------------------------ ---- --- ------------------------ ---
    --
    ----- ------------------- ----- ---- -
      ------ ----- --------------------------------------------
    -
  --

  --------- -
    ----- ------------------ - ----- -- ---- -
      ----- ------ - ----- --------------------------------------------
      ------ - --- ----------------------------- -------- --
    --
    ----- ------------------ - --- ----- -- ---- -
      ----- ------ - ----- --------------------------------------------- ---- --- ------------------------ -- - ----- ----- -- - --------------- ----- ---
      ------ -------------
    --
    ----- ------------------ - -- -- ---- -
      ------ ----- --------------------------------------------- ---- --- ------------------------ ---
    -
  -
--

----- ----------- - ----- -- -- -
  ----- ------ - ----- ------------------------------------------------ - ---------------- ---- ---
  ----- -- - -------------------
  
  ----- ------ - --- -------------- --------- ---------- -------- - -- - ---
  
  ----- --- - --- ------
  ----------------------
  ------------------------ --- ---
  
  ---------------- -- -- -
    -------------------- ------ ------- -- --------------------------------
  ---
--

--------------

在上面的代码中,我们首先引入了 MongoClient,用于连接到 MongoDB 数据库。在 typeDefs 中,我们定义了一个名为 User 的类型,该类型包含 idnameage 字段,在 Query 中定义了 getUsergetAllUsers 查询。此外,我们还定义了一个 CreateUserInput 输入类型和三个有关用户的变异。

resolvers 中,我们实现了这些查询和变异的逻辑。在 startServer 函数中,我们连接到数据库并将 db 对象提供给 ApolloServer 实例的上下文中。由于我们使用了 MongoDB 的异步 API,因此我们为查询和变异函数添加了 async/await 关键字。

现在,我们可以在 http://localhost:4000/graphql 中执行以下查询和变异操作:

查询单个用户:

查询所有用户:

创建新用户:

更新用户信息:

删除用户:

总结

在本文中,我们学习了如何将 GraphQL 集成到 Koa 中,并通过连接 MongoDB 定义了查询和变异操作。在任何项目中,这些技术都有很大的作用,而且将它们集成在一起通常更简单、优雅且容易维护。希望本文对您有所帮助,在您的下一个项目中能够运用上这些技术!

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648a8ea048841e98948af671

纠错
反馈