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

使用@apollo/server结合expressMiddleware时,已添加express.json()仍报'req.body is not set'错误的问题咨询

@apollo/server结合expressMiddleware时,已添加express.json()仍报'req.body is not set'错误的问题咨询

嘿,我之前也踩过这个坑,来帮你捋捋可能的问题和解决办法:

首先,这个错误看起来是Apollo Server拿不到请求体,但你确实加了express.json(),那咱们先从最常见的排查点开始:

  • 先确认你的请求是不是符合要求
    这个错误90%的情况都是请求本身的问题:

    • 你是不是用GET请求访问/graphql了?Apollo Server处理查询的时候,GET请求是通过URL参数传查询内容的,不会携带请求体,自然会报这个错,必须用POST请求才行。
    • 再检查请求头有没有加Content-Type: application/json,如果这个请求头不对,express.json()根本不会去解析请求体,req.body自然是undefined。
    • 最后看请求体是不是合法的JSON结构,比如要像这样:
      {
        "query": "query { getTodos { id Title Completed } }"
      }
      
  • 再看看代码里的隐蔽问题
    从你的代码来看,中间件的顺序是对的——express.json()确实在expressMiddleware之前挂载了,而且你也正确地等server.start()之后才挂载的GraphQL中间件,这部分没问题。不过可以试试这几个小调整:

    1. 显式给express.json()加个大小限制,避免因为请求体超过默认上限导致解析失败:
      app.use(express.json({ limit: '10mb' }));
      
    2. 加个测试中间件,看看请求体在到达Apollo之前有没有被解析:
      app.use("/graphql", (req, res, next) => {
        console.log("请求体内容:", req.body);
        next();
      }, expressMiddleware(server));
      
      运行后发起请求,看看控制台打印的req.body是不是undefined——如果是,那说明express.json()确实没生效,大概率还是请求头的问题;如果有内容,那可能是Apollo Server的配置有问题(不过这种情况很少见)。

另外,你的代码里resolvers是空的,这个只会导致查询返回空数据,和当前的req.body错误没关系,不用太担心这个。

按照上面的步骤排查,应该能很快找到问题所在~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 08:59:34