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

时间:2018-08-06 21:40:08

标签: express graphql middleware apollo

我只是想知道这种看似笨拙的配置(来自Getting Started w/ Apollo Server)的原因是什么,

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.use()来给我app供电,甚至从文档中看来,Apollo只是在{{1}上回答请求}遵循Express API,

/graphql

似乎Apollo正在颠覆Express的正常中间件流程?以Apollo方式进行操作有什么优势?

1 个答案:

答案 0 :(得分:1)

我不与那些人打交道,但是基于那里的代码,我认为这与以下事实有关:它将body-parser,上传功能,websockets(如果您选择加入)添加到该应用程序,以及用于引擎运行状况检查的。众所周知的配置。根据该规范,知名人士必须扎根。此外,如果您使用的是订阅和网络套接字,它们会监听httpServer.once('listening'),因此它们必须有权访问您的应用。如果他们只是简单地递给您一个可以挂载的设备,那么您就不会app.listen,因为您会自己app.listen

至少从内部来讲,这就是我所期望的。