我只是想知道这种看似笨拙的配置(来自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方式进行操作有什么优势?
答案 0 :(得分:1)
我不与那些人打交道,但是基于那里的代码,我认为这与以下事实有关:它将body-parser,上传功能,websockets(如果您选择加入)添加到该应用程序,以及用于引擎运行状况检查的。众所周知的配置。根据该规范,知名人士必须扎根。此外,如果您使用的是订阅和网络套接字,它们会监听httpServer.once('listening')
,因此它们必须有权访问您的应用。如果他们只是简单地递给您一个可以挂载的设备,那么您就不会app.listen
,因为您会自己app.listen
。
至少从内部来讲,这就是我所期望的。