首页 > 解决方案 > 当同时使用 GraphQL 时,Nodejs 和 Express 在 MERN 堆栈 Web 应用程序中的作用是什么?

问题描述

我知道这是一个非常初学者的问题,但是当涉及到 MERN 堆栈和 GraphQL 时,我很难掌握一些东西。在 github上有一个特殊的项目,其中使用 MongoDB、Express、React 和 Nodejs 以及 GraphQL 开发 Web 应用程序。

我确实了解 MongoDB 用于数据存储,React 用于前端,但我无法理解为什么使用 Express 和 Nodejs 如果 API 是使用 GraphQL 创建的,它直接向/从 POST 和 GETs 数据MongoDB数据库?nodejs、express和graphql之间的作用和相互关系是什么?

这个问题对你来说可能没有意义,因为我缺少 Web 应用程序开发的基本概念的知识以及对 MERN 等 Web 开发堆栈的理解。

标签: node.jsapiexpressgraphqlbackend

解决方案


Node.js 是一个 JavaScript 运行时环境——它实际执行所有服务器端代码。Express 是一个框架,它提供了在 Node.js 中开发 Web 应用程序的基本功能。虽然 Node.js 已经能够监听端口上的请求,但 Express 通过消除样板文件并提供更简单的 API 来创建端点,使设置 Web 服务器变得更简单。

GraphQL 是一种查询语言。GraphQL.js 是 GraphQL 的 JavaScript 实现。两者都不能创建端点或 Web 服务器。GraphQL 本身不会监听对特定端口的请求。这就是我们使用 Express 的目的——结合另一个库,比如apollo-server-expressor express-graphql,Express 设置我们的端点,监听到端点的传入请求,解析它们并将它们交给 GraphQL 执行。然后它将执行结果发送回发出请求的客户端。

同样,GraphQL.js 不能直接与数据库交互。GraphQL 只是执行您为响应请求而提供的代码。与数据库的实际交互通常通过驱动程序(如mongodb)或 ORM(如mongoose)完成。

因此,客户端(例如您的 React 应用程序)向您的 Express 应用程序发出请求,后者解析请求并将其交给 GraphQL,后者执行您的查询并在此过程中调用一些代码,然后从您的数据库中获取数据。该数据被格式化为适当的响应并发送回客户端。


推荐阅读