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

Medusa.JS中POST中间件req.body为空的问题求助

为什么Medusa.js中req.body为空?

以下是排查和解决的几个方向:

  • 检查请求Content-Type头
    确保前端请求时设置了正确的Content-Type:如果是JSON数据,必须设为application/json;如果包含文件,用multipart/form-data。Medusa的默认bodyParser只会解析匹配对应Content-Type的请求体,头不匹配的话req.body会是空的。

  • 调整中间件执行顺序排查
    你当前把authenticateCustomer()放在myTestFunc前面,有可能认证中间件在处理过程中消耗了请求体或者修改了req对象。可以临时把myTestFunc移到认证中间件前面,看看req.body是否有值,以此确认是不是认证中间件的问题。

  • 回退依赖版本测试
    既然之前能正常运行,现在突然失效,大概率是依赖更新导致的。查看package.json里Medusa及相关依赖(如body-parser、express)的版本,回退到之前正常的版本重新启动服务,验证问题是否消失。

  • 直接验证请求有效性
    用Postman或curl直接构造请求,确认请求体确实被正确发送:

    curl -X POST http://你的服务地址/store/carts/测试ID/line-items \
      -H "Content-Type: application/json" \
      -d '{"quantity": 2, "variant_id": "你的商品变体ID"}'
    

    如果这样发送后req.body还是空,问题出在服务端;如果有值,那是前端请求的问题。

  • 检查Medusa的bodyParser自定义配置
    虽然Medusa默认启用bodyParser,但项目中可能存在自定义配置覆盖了默认行为。检查medusa-config.js或其他自定义express配置文件,看是否有修改bodyParser的参数,比如限制了请求体大小、禁用了JSON解析等。

你的中间件代码参考:

async function myTestFunc(req: MedusaRequest, res: MedusaResponse, next: MedusaNextFunction) {
  const logger = req.scope.resolve<Logger>('logger');
  console.log("Request BODY!", JSON.stringify(req.body))
  console.log("Request PARAMS!", JSON.stringify(req.params))
  console.log("Customer ID!", JSON.stringify(req.user?.customer_id))
  next();
}

export const config: MiddlewaresConfig = {
  routes: [
    {
      matcher: '/store/carts/:id/line-items',
      middlewares: [authenticateCustomer(), myTestFunc]
    }
  ],
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:12:16