如何使用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
相关产品推荐
相关产品推荐

