这里,
作为与阿波罗服务器集成的逻辑,他们使用了
import { ApolloServer } from 'apollo-server-express';
import { ApolloServerPluginDrainHttpServer } from 'apollo-server-core';
import express from 'express';
import http from 'http';
async function startApolloServer(typeDefs, resolvers) {
const app = express();
const httpServer = http.createServer(app);
const server = new ApolloServer({
typeDefs,
resolvers,
plugins: [ApolloServerPluginDrainHttpServer({ httpServer })],
});
await server.start();
server.applyMiddleware({ app });
await new Promise(resolve => httpServer.listen({ port: 4000 }, resolve));
console.log(` Server ready at http://localhost:4000${server.graphqlPath}`);
}
server.applyMiddleware({ app });的意思是,我知道" app“是一个快速应用实例,但是为什么把它作为中间件传递给阿波罗服务器。它本身不是一个中间件!
我理解将特殊的真正中间件(称为rest)传递给像这个app.use(server.getMiddleware(rest))这样的服务器,我需要理解如何在应用中间件中传递应用程序。
发布于 2021-10-18 04:37:12
医生说:
您可以调用
server.getMiddleware
而不是server.applyMiddleware
,如果您想使用中间件功能来做一些事情,那么除了直接将它应用于应用程序之外。(server.applyMiddleware({ app, ...rest })
是app.use(server.getMiddleware(rest))
的缩写。)
源代码 of applyMiddleware
for apollo-server-express
包:
public applyMiddleware({ app, ...rest }: ServerRegistration) {
// getMiddleware calls this too, but we want the right method name in the error
this.assertStarted('applyMiddleware');
app.use(this.getMiddleware(rest));
}
https://stackoverflow.com/questions/69606324
复制相似问题