You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apollo Server 4中如何传递上下文值?适配3.x旧写法的疑问

在Apollo Server 4中实现会话刷新与上下文传递的方案

Apollo Server 4的上下文配置逻辑与v3本质一致,仅服务器初始化API有所调整,以下是两种常见场景的实现方式,可完全复用你原有的会话处理逻辑:

1. Standalone模式(快速启动)

这是AS4推荐的默认启动方式,上下文通过startStandaloneServer的context选项配置:

import { startStandaloneServer } from '@apollo/server/standalone';
import { executableSchema } from './your-schema-path';
import { contextFunction } from './your-context-path';
import { secretValues } from './your-secrets-path';

async function startServer() {
  const { url } = await startStandaloneServer(executableSchema, {
    debug: true,
    // 直接传入原有的上下文函数
    context: contextFunction(secretValues),
    listen: { port: 4000 },
  });

  console.log(`🚀 Server ready at ${url}`);
}

startServer();

2. 集成到Express框架

若需与Express集成,通过expressMiddleware的context选项配置上下文:

import { ApolloServer } from '@apollo/server';
import { expressMiddleware } from '@apollo/server/express4';
import express from 'express';
import { executableSchema } from './your-schema-path';
import { contextFunction } from './your-context-path';
import { secretValues } from './your-secrets-path';

async function startServer() {
  const app = express();
  const server = new ApolloServer({
    debug: true,
    schema: executableSchema,
  });

  await server.start();

  app.use(
    '/graphql',
    express.json(),
    // 传入上下文函数
    expressMiddleware(server, {
      context: contextFunction(secretValues),
    }),
  );

  await new Promise<void>((resolve) => app.listen({ port: 4000 }, resolve));
  console.log(`🚀 Server ready at http://localhost:4000/graphql`);
}

startServer();

核心说明

  • 你原有的contextFunction无需任何修改,闭包传递secretValues、会话验证刷新、返回的上下文数据(pubsub、dataLoaders、session等)逻辑完全兼容AS4。
  • 每个请求会独立生成上下文,所有解析器都能直接获取到最新的会话状态,无需在解析器中单独处理会话刷新。

内容的提问来源于stack exchange,提问作者Gergő Horváth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:43:25