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

如何使用createYoga将Express的Request和Response传入graphql-yoga上下文?

问题解决:将Express req/res传入GraphQL Yoga上下文

你的代码问题出在app.use的用法上——你在回调函数里返回createYoga创建的中间件,但Express不会自动执行这个返回的中间件,导致GraphQL请求没被Yoga处理,所以无法正常通过。

正确写法

直接把createYoga生成的中间件传给app.use,并通过上下文函数的参数获取Express的req和res:

// 确保express-session中间件挂载在GraphQL路由之前
app.use(session({
  secret: "your-session-secret",
  resave: false,
  saveUninitialized: false,
  // 可选:配置redis等存储
}));

// 挂载GraphQL Yoga中间件
app.use("/graphql", createYoga({
  context: ({ request, response }) => {
    return {
      req: request, // 这里的request就是Express的req对象,包含session
      res: response, // 对应Express的res对象
      prisma,
      redis: redisClient,
    };
  },
  graphiql: true,
  landingPage: false,
  cors: false,
  schema,
}));

关键说明

  • 中间件挂载顺序:必须先挂载express-session中间件,再挂载GraphQL路由,这样req.session才能被正确初始化并在上下文里访问到。
  • 上下文参数:Yoga的上下文函数会自动传入request和response,它们对应Express原生的req和res,直接使用即可。
  • 避免嵌套回调:不要在app.use的回调里返回中间件,直接把Yoga中间件作为参数传给app.use才是正确的挂载方式。

内容的提问来源于stack exchange,提问作者crispengari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:15:42