【发布时间】:2022-02-10 19:28:19
【问题描述】:
由于我需要为我的 GraphQL 服务器添加更多配置,我正在从 apollo-server 切换到 apollo-server-express (as recommended by the documentation)。
这是我的老index.ts:
import { env } from 'process'
import { ApolloServer } from 'apollo-server'
import { typeDefs } from '../graphql/schema'
import { context } from './context'
import resolvers from '../graphql/resolvers/'
const port = env.GRAPHQL_SERVER_PORT || 80
const server = new ApolloServer({
typeDefs,
resolvers,
context
})
server.listen({ port: port }).then(({ url }) => {
console.log(`Server ready at ${url}`)
})
这就是我现在要做的:
import { env } from 'process'
import { ApolloServer } from 'apollo-server-express';
import { ApolloServerPluginDrainHttpServer } from 'apollo-server-core';
import express from 'express';
import { forceDomain } from 'forcedomain'
import http from 'http';
import { typeDefs } from '../graphql/schema'
import { context } from './context'
import resolvers from '../graphql/resolvers/'
async function startApolloServer(typeDefs: any, resolvers: any, context: any) {
const port = env.GRAPHQL_SERVER_PORT || 80
const app = express();
const httpServer = http.createServer(app);
const plugins = [ApolloServerPluginDrainHttpServer({ httpServer })]
const server = new ApolloServer({
typeDefs,
resolvers,
context,
plugins,
});
await server.start();
app.use(function(req, res, next) {
// some extra middleware configuration here
})
server.applyMiddleware({ app })
await new Promise<void>(resolve => httpServer.listen({ port: port }, resolve))
console.log(`Server ready at http://localhost:${port}${server.graphqlPath}`)
}
startApolloServer(typeDefs, resolvers, context)
我不明白的是,在切换到 apollo-server-express 后,一切正常(并且添加的中间件完成了我需要它做的事情)但是 GraphQL 端点被移动到 /graphql 路由(即 @当我使用apollo-server 和listen 方法时,而不是像以前那样位于根目录上(所以只是http://localhost:4000)。
为什么会这样,我如何在使用apollo-server-express 的同时将端点保持在服务器的根目录上?
【问题讨论】:
标签: node.js express graphql apollo-server