@as-integrations/express5
v1.1.2
Published
An Apollo Server integration for use with Express v5
Downloads
3,637,278
Keywords
Readme
Apollo Server Integration for Express v5
Introduction
This package integrates Apollo Server v4 with version 5 of the Express web framework, by exporting a middleware that executes GraphQL operations.
It is identical to the middleware exported at @apollo/server/express5 from the core @apollo/server v4 package, updated to support Express v5 instead of Express v4.
Requirements
- Node.js v20 or later
- Express v5; see
@as-integrations/express4for Express v4 support - Apollo Server v4
Installation
npm install @apollo/server graphql express@5 @as-integrations/express5 corsUsage
Set up Express & Apollo Server like you usually would, and then connect the two by using the expressMiddleware middleware:
import { ApolloServer } from '@apollo/server';
import { expressMiddleware } from '@as-integrations/express5';
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/`);Note: You must call and await server.start() before using the integration.
