为什么 Apollo Server 不是 Express 的中间件,而是接受 Express 作为中间件的服务器?

2024-04-28

我只是想知道这种看似尴尬的配置的原因是什么(来自Apollo 服务器入门 https://www.apollographql.com/docs/apollo-server/getting-started.html),

const server = new ApolloServer({
  // These will be defined for both new or existing servers
  typeDefs,
  resolvers,
});

server.applyMiddleware({ app }); // app is from an existing express app

为什么我打电话.applyMiddleware()并喂它我的app而不是使用app.use() https://expressjs.com/en/guide/using-middleware.html,甚至从文档中看来,Apollo 仅响应以下请求/graphql遵循 Express API 不是更好吗?

let apollo = require('apollo-server').ApolloMiddleware
app.use( '/graphql', apollo({ typeDefs, resolvers }) );

看起来 Apollo 正在颠倒 Express 的正常中间件流程?采用 Apollo 方式有什么优势?


我不与这些人合作,但根据那里的代码,我认为这与它向应用程序添加了正文解析器、上传功能、Websockets(如果您选择使用此功能)这一事实有关,以及用于引擎健康检查的众所周知的配置。根据该规范,众所周知的必须是根源。此外,如果您使用订阅和网络套接字,它们会监听httpServer.once('listening'),因此他们必须有权访问您的应用程序。如果他们只是给你一个可以安装的,你就不会app.listen关于它,因为你app.listen而是靠你自己。

仅从内部来看,至少这是我所期望的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Apollo Server 不是 Express 的中间件,而是接受 Express 作为中间件的服务器? 的相关文章

随机推荐