使用 Express 和 GraphQL 而不是简单地使用 Node.js 和 GraphtQL 有啥好处?

Posted

技术标签:

【中文标题】使用 Express 和 GraphQL 而不是简单地使用 Node.js 和 GraphtQL 有啥好处?【英文标题】:What is the benefit of using Express with GraphQL instead of simply using Node.js with GraphtQL?使用 Express 和 GraphQL 而不是简单地使用 Node.js 和 GraphtQL 有什么好处? 【发布时间】:2019-11-17 00:44:11 【问题描述】:

将 Express 与 GraphQL 结合使用有什么好处? GraphQL 的所有优点也可以在没有 Express 的简单 Node.js 应用程序中使用。由于 GraphQL 只有一个端点,没有像 Express 那样的中间件概念,我们为什么要使用 Express 而不仅仅是 Node.js?

【问题讨论】:

【参考方案1】:

    Express 使用 Node.js http 模块 under the hood 但通过中间件为您提供了一种为端点实现各种功能的方法。例如,要处理 POST 请求(您需要为 GraphQL 执行此操作),您需要将请求正文解析为可用格式——如果您不使用 Express 和像 body-parser 这样的中间件,您会必须手动完成。你可能需要的other common functionality 也是如此,比如 CORS、会话管理等。既然有中间件,为什么还要重新发明***?

    GraphQL 本身可能没有中间件的概念(尽管 有一个库可以有效地does just that),Express 的中间件仍然适用于整个 GraphQL 端点。这意味着您可以设置在 GraphQL 端点之前运行的中间件。除了上面已经描述的功能之外,这还为您提供了为您的端点实施授权逻辑的机会。例如,您可以阻止未能提供适当的自定义标头的用户访问整个端点。

    实际上,您的应用可能需要的不仅仅是 GraphQL 端点。身份验证通常在 GraphQL 之外通过公开一个或多个附加端点来处理——如果您为您的应用程序实现 OAuth flow,则尤其如此。同样,您可以与使用 webhook 的第三方服务交互,这将要求您专门为此目的在服务器上公开其他端点。运行状况检查也是如此,例如负载平衡器使用的检查。

【讨论】:

以上是关于使用 Express 和 GraphQL 而不是简单地使用 Node.js 和 GraphtQL 有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章

将 GraphQL 模式拆分为 express-graphql 中不同模块的最佳方法?

Node / Express with Graphql错误“_author2.default不是构造函数”

使用 nodejs 对 graphql 使用啥

我是不是错误地使用了 GraphQL?我不知道它是如何向我发回数据的

使用 express-graphql 和 HTTP 客户端从 graphql 获取数据

使用 GraphQL 和 jwt-express 绕过 JWT