当同时使用 GraphQL 时,Nodejs 和 Express 在 MERN 堆栈 Web 应用程序中的作用是啥?
Posted
技术标签:
【中文标题】当同时使用 GraphQL 时,Nodejs 和 Express 在 MERN 堆栈 Web 应用程序中的作用是啥?【英文标题】:What is the role of Nodejs and Express in a MERN stack web application when GraphQL is also used?当同时使用 GraphQL 时,Nodejs 和 Express 在 MERN 堆栈 Web 应用程序中的作用是什么? 【发布时间】:2020-03-28 19:55:24 【问题描述】:我知道这是一个非常初学者的问题,但是当涉及到 MERN 堆栈和 GraphQL 时,我很难掌握一些东西。有这个particular project on github 使用 MongoDB、Express、React 和 Nodejs 以及 GraphQL 开发 Web 应用程序。
我确实了解 MongoDB 用于数据存储,React 用于前端,但如果 API 是使用 GraphQL 创建的,它直接 POST 和 GETs 数据到,我无法理解为什么要使用 Express 和 Nodejs /来自 MongoDB 数据库? nodejs、express和graphql的作用和相互关系是什么?
这个问题对你来说可能没有意义,因为我缺少 Web 应用开发的基本概念知识和对 MERN 等 Web 开发堆栈的理解。
【问题讨论】:
【参考方案1】:Node.js 是一个 javascript 运行时环境——它实际执行所有服务器端代码。 Express 是一个框架,它提供了在 Node.js 中开发 Web 应用程序的基本功能。虽然 Node.js 已经能够监听端口上的请求,但 Express 通过消除样板文件并提供更简单的 API 来创建端点,让设置 Web 服务器变得更简单。
GraphQL 是一种查询语言。 GraphQL.js 是 GraphQL 的 JavaScript 实现。两者都不能创建端点或 Web 服务器。 GraphQL 本身不会监听对特定端口的请求。这就是我们使用 Express 的目的——结合另一个库,如 apollo-server-express
或 express-graphql
,Express 设置我们的端点,监听到端点的传入请求,解析它们并将它们交给 GraphQL 执行。然后它将执行结果发送回发出请求的客户端。
同样,GraphQL.js 不能直接与数据库交互。 GraphQL 只是执行您为响应请求而提供的代码。与数据库的实际交互通常通过驱动程序(如mongodb)或ORM(如mongoose)完成。
因此,客户端(如您的 React 应用程序)向您的 Express 应用程序发出请求,后者解析请求并将其交给 GraphQL,GraphQL 执行您的查询并在此过程中调用一些代码,然后从您的数据库中获取数据。该数据被格式化为适当的响应并发送回客户端。
【讨论】:
【参考方案2】:对于初学者,您所引用的缺失项目详细信息如下:
-
使用
Node.js
为API 生成或运行代码创建环境。 GraphQL 无法单独做到这一点。
Express
用于正文解析中间件,身份验证中间件(它将对每个 GraphQL 请求进行身份验证)和express-graphql
用于 GraphQL 与 express 框架的集成(意味着在身份验证中间件 next() 函数触发后将调用 graphQL API 函数)。
GraphQL
创建 API,需要经过 auth 中间件调用 next() 函数。
所以项目的工作方式如下:
-
Mongoose 先连接。
Node.js 启动服务器。
当 API 调用发送到服务器时,那么
a) 使用 express
bodyParser
解析它们
b) 在这些请求上设置标头。
c) auth
中间件调用。
d) 现在是 GraphQL 的工作来处理 API。
【讨论】:
以上是关于当同时使用 GraphQL 时,Nodejs 和 Express 在 MERN 堆栈 Web 应用程序中的作用是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 NodeJS 发送基于 DynamoDb 流的 graphQL 突变