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

如何将Express的req对象传入graphql-http的createHandler中间件

解决方案

你可以通过graphql-http的createHandler配置中的context选项,将Express的req对象传入GraphQL的处理流程中,具体修改如下:

app.use('/graphql', createHandler({
  schema,
  // 从Express请求中提取数据并传入GraphQL上下文
  context: (req) => {
    return {
      user: req.user, // 直接获取authenticate中间件赋值的req.user
      req: req // 也可传入完整的req对象
    };
  },
}));

之后在你的GraphQL resolver中,就能通过上下文参数访问到这些数据:

const resolvers = {
  Query: {
    currentUser: (parent, args, context) => {
      // 此处context.user即为authenticate中间件赋值的用户信息
      return context.user;
    },
  },
};

graphql-http官方文档(Express部分)中文翻译

在Express环境中,createHandler的处理函数会直接接收Express的Request和Response对象作为参数。你可以利用这一特性自定义上下文、解析请求参数等。

官方示例代码:

import express from 'express';
import { createHandler } from 'graphql-http/lib/use/express';
import { schema } from './my-graphql-schema';

const app = express();

// 挂载GraphQL请求处理路由
app.all('/graphql', createHandler({ schema }));

app.listen(4000);
console.log('监听端口4000');

需要注意的是,context选项是一个函数,它会接收当前的Express请求对象,你可以在这里提取需要的信息并返回,所有GraphQL resolver都能通过上下文参数访问这些数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:16:09