使用 Node.js 和 GraphQL 构建完整堆栈应用程序

阅读时长 7 分钟读完

随着 Web 应用程序的不断发展,前端开发变得越来越重要。Node.js 是一个非常流行的 Web 应用程序开发工具,它支持 JavaScript 编写的服务器端应用程序。GraphQL 是一种用于 API 开发的查询语言,可以与各种后端数据源集成。

在本文中,我们将讨论如何使用 Node.js 和 GraphQL 构建完整堆栈应用程序。我们将深入探讨这些技术背后的原理,并提供用于建立自己项目所需的示例代码。

什么是 Node.js?

Node.js 是一个基于 Chrome V8 JavaScript 引 擎的 JavaScript 运行时。它是用于构建快速、可扩展网络应用程序的后端技术。Node.js 是一个事件驱动的非阻塞 I/O 模型,它允许我们在单个进程中处理大量并发连接。

Node.js 可以用于创建几乎任何类型的后端应用程序,从静态网站到实时 Web 应用程序和 API。Node.js 具有轻量级、高性能、可扩展性和热门开发工具等优点,这使得它成为 Web 开发人员的首选工具之一。

什么是 GraphQL?

GraphQL 是一种用于 API 开发的查询语言。它由 Facebook 开发并于 2015 年正式发布。GraphQL 基于类型系统,并提供了一种强大的语言来定义 API 的数据结构。

使用 GraphQL,我们可以声明需要从服务器检索的数据的结构和格式。GraphQL 还支持复杂的数据查询和变异,并提供了一种用于处理错误和安全性的评估机制。GraphQL 简化了前端和后端之间的通信,使得开发人员更加便捷且提高了开发效率。

使用 Node.js 和 GraphQL 构建应用程序

在这个例子中,我们将创建一个简单的电影列表应用程序,允许用户查看可用的电影,并对他们进行评分。我们将使用 Node.js 和 GraphQL 来实现应用程序的后端功能:

1. 创建项目

首先,我们需要创建一个新的 Node.js 项目。我们可以使用 Node.js 的包管理器 npm 来初始化项目:

2. 安装依赖

我们需要安装以下依赖项,以便能够在 Node.js 中使用 GraphQL:

GraphQL(驱动我们的 API)、Express(HTTP 服务器框架)和 graphql-import(将 schema 拆分为多个文件)。

3. 编写 schema

接下来,我们需要编写一个 GraphQL schema。schema 定义了我们将从服务器端检索哪些数据,以及哪些数据可以被更新。在这个例子中,我们需要定义一个 Movie 类型,并实现与它相关的各种查询、变更和订阅操作。

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

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

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

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

我们定义了一个 Movie 类型,包含其 ID、标题、发行年份和评分字段。Query 类型包含可用于检索电影数据的 movies 和 movie,而 Mutation 类型允许更新电影数据。Subscription 类型提供了一种订阅特定电影被评级事件的机制。

4. 实现 resolvers

我们需要在 GraphQL schema 中定义的查询、变更和订阅操作的 resolvers。resolver 是一个函数,它将从服务器检索、更新或订阅所需的数据。在这个例子中,我们需要编写以下 resolvers:

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

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

我们编写了一个 movies 和一个 movie resolver 来返回该数据源中可用的电影。rateMovie resolver 接受电影 ID 和评分参数,并更新指定电影的评分。movieRated resolver 允许我们订阅特定电影评级的事件通知。

我们将从一个简单的数据源中获取电影数据:

5. 设置服务器

最后,我们需要创建一个 HTTP 服务器,它将处理客户端的 GraphQL 查询、变更和订阅请求。我们将使用 Express 来创建服务器,并使用 express-graphql 中间件来处理 GraphQL 请求。

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

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

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

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

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

首先,我们创建了一个新的 Express 应用,并实例化了一个 PubSub 对象以便于实现我们的订阅功能。然后,我们使用 ApolloServer 类创建了一个新的 Apollo 服务器,将我们的 schema 和 resolvers 传递给它。我们还将 context 对象传递给服务器,以便于访问 PubSub。

最后一步是向 Express 应用的 middleware 中添加 Apollo Server,然后启动服务器并在控制台中记录它的位置。

结论

在本文中,我们探讨了如何在 Node.js 和 GraphQL 中构建完整堆栈应用程序。我们讨论了这些技术的基础原理,并演示了如何编写 schema 和 resolvers,以及如何设置一个 Apollo 服务器来处理 GraphQL 请求。

Node.js 和 GraphQL 提供了一种强大的工具组合,可以用于开发高性能、可扩展和强大的 Web 应用程序和 API。这些技术使得前端和后端之间的通信更加容易和快捷,可以帮助开发人员更加高效地管理和操作数据。我们希望这篇文章提供了有深度和学习以及指导意义的指导,帮助你使用 Node.js 和 GraphQL 开发你自己的堆栈应用程序。

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

纠错
反馈