You need to enable JavaScript to run this app. Express.js如何获取POST请求的实际body JSON并查询ReqBody任意字段
优惠活动
大模型
产品
解决方案
定价
更多

Express.js如何获取POST请求的实际body JSON并查询ReqBody任意字段

Express.js 获取POST请求原始JSON及动态读取字段方案

前置配置确认

首先确保你已经在Express实例中注册了JSON解析中间件,否则req.body会是undefined,Express v4.16.0及以上版本内置了该中间件,配置代码如下:

const express = require('express');
const app = express();
// 注册JSON解析中间件
app.use(express.json());
// 如果是路由拆分的场景,也可以给路由单独注册
// router.use(express.json())

1. 动态读取req.body中的任意字段

JS对象支持方括号语法读取动态属性,不需要提前知道字段名,只需要把字段名作为字符串传入方括号即可,不管是固定的username还是任意自定义字段foo都可以用这个方式读取:

router.post('/', function (req, res, next){
  let body = req.body;
  // 示例1:读取固定字段foo,等价于body.foo
  const fooValue = body['foo'];
  // 示例2:读取动态变量指定的字段,比如字段名存在变量fieldName里
  const fieldName = '任意你要读取的字段名';
  const targetValue = body[fieldName];
  // 可以加个判断避免字段不存在返回undefined
  if(targetValue === undefined) {
    return res.status(400).send(`缺少字段${fieldName}`);
  }
});

2. 获取原始的JSON请求字符串

如果需要拿到未被解析的原始JSON字符串,有两种实现方式:

方式1:配置express.json的verify选项收集原始数据

在注册中间件的时候添加verify配置,把原始buffer存到req对象上:

app.use(express.json({
  verify: (req, res, buf) => {
    // 把原始请求buffer存到req.rawBody上,转成字符串就是原始JSON
    req.rawBody = buf.toString();
  }
}));

// 路由里就可以直接取
router.post('/', function (req, res, next){
  const originalJsonStr = req.rawBody;
  console.log(originalJsonStr); // 就是前端传过来的原始JSON字符串
});

方式2:单独写原始请求体解析中间件

如果不想修改默认的json中间件配置,也可以单独写中间件处理:

// 原始请求体解析中间件
const rawBodyParser = (req, res, next) => {
  let buf = [];
  req.on('data', chunk => buf.push(chunk));
  req.on('end', () => {
    req.rawBody = Buffer.concat(buf).toString();
    // 继续走后续的json解析中间件
    next();
  });
}

// 路由使用时先加这个中间件
router.post('/', rawBodyParser, express.json(), function (req, res, next){
  const originalJsonStr = req.rawBody; // 原始JSON字符串
  const body = req.body; // 解析后的对象
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 15:12:00