随着 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 来初始化项目:
npm init
2. 安装依赖
我们需要安装以下依赖项,以便能够在 Node.js 中使用 GraphQL:
npm install graphql express graphql-import
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 允许我们订阅特定电影评级的事件通知。
我们将从一个简单的数据源中获取电影数据:
// src/data.js module.exports.movies = [ { id: '1', title: 'The Matrix', releaseYear: 1999, rating: 4.7 }, { id: '2', title: 'The Lord of the Rings', releaseYear: 2001, rating: 4.5 }, { id: '3', title: 'Back to the Future', releaseYear: 1985, rating: 4.3 }, ];
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