Express v4 的阿波罗服务器集成
导言
这个软件包通过导出一个执行GraphQL操作的中间软件,将Aporo Server v4与Express网络框架的第4版集成.
它与出口于 @apollo/server/express4 从核心 @apollo/server v4 软件包. 它被单独提供,这样我们也可以提供与Express v5的集成(@as-integrations/express5;未来阿波罗服务器的主要版本将不会有内置支持Express.
所需资源
安装
npm install @apollo/server graphql express@4 @as-integrations/express4 cors
使用量
设置 快递 打开 阿波罗服务器 就像你通常会,然后通过使用 expressMiddleware 中间软件 :
import { ApolloServer } from '@apollo/server';
import { expressMiddleware } from '@as-integrations/express4';
import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer';
import express from 'express';
import http from 'http';
import cors from 'cors';
import { typeDefs, resolvers } from './schema';
interface MyContext {
token?: string;
}
// Required logic for integrating with Express
const app = express();
// Our httpServer handles incoming requests to our Express app.
// Below, we tell Apollo Server to "drain" this httpServer,
// enabling our servers to shut down gracefully.
const httpServer = http.createServer(app);
const server = new ApolloServer<MyContext>({
typeDefs,
resolvers,
plugins: [ApolloServerPluginDrainHttpServer({ httpServer })],
});
// Ensure we wait for our server to start
await server.start();
// Set up our Express middleware to handle CORS, body parsing,
// and our expressMiddleware function.
app.use(
'/',
cors<cors.CorsRequest>(),
express.json(),
// expressMiddleware accepts the same arguments:
// an Apollo Server instance and optional configuration options
expressMiddleware(server, {
context: async ({ req }) => ({ token: req.headers.token }),
}),
);
await new Promise<void>((resolve) =>
httpServer.listen({ port: 4000 }, resolve),
);
console.log(`🚀 Server ready at http://localhost:4000/`);
说明: 你必须打电话等待 server.start() 在使用整合之前.