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

如何在Express中获取POST请求体?请求体为空问题排查

解决Express中POST请求req.body为空的问题

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

  • 检查请求头Content-Type配置
    你代码里用了express.json()中间件,它仅会解析Content-Type为application/json的请求体。如果Postman发送请求时没设置这个请求头,或者用了form-data、x-www-form-urlencoded这类格式,json解析中间件不会生效,导致req.body为空。

    • 对应解决:
      1. 若发送JSON数据,在Postman的Headers栏添加Content-Type: application/json;
      2. 若发送表单数据,需额外添加对应解析中间件:
        • 处理x-www-form-urlencoded:添加app.use(express.urlencoded({ extended: true }));
        • 处理form-data:需要安装并使用multer包(express自带中间件不支持该类型)。
  • 验证请求体的JSON格式合法性
    即使设置了正确的请求头,JSON格式错误(比如缺少引号、逗号误用)也会导致解析失败,req.body返回空对象。

    • 对应解决:在Postman的Body选择raw->JSON,输入标准格式的JSON内容,例如:
      {
        "locationName": "示例地点"
      }
      
  • 确认中间件加载顺序
    确保express.json()这类解析中间件是在路由定义(app.post('/'))之前加载的,Express中间件按顺序执行,若路由先于解析中间件定义,处理请求时还未完成请求体解析,req.body会为空。你的现有代码顺序是正确的,后续修改代码时需注意这一点。

  • 移除无用依赖的干扰
    你代码中引入了request包但未使用,虽然它通常不会直接影响请求体解析,但可以尝试移除该引入,避免潜在的版本兼容问题。

修改后的示例代码(支持JSON和表单编码格式):

const express = require('express');
const app = express();

// 解析JSON格式请求体
app.use(express.json());
// 解析x-www-form-urlencoded格式请求体
app.use(express.urlencoded({ extended: true }));

app.post('/', async (req, res) => {
  try {
    console.log(req.body);
    res.status(200).json({ requestBody: req.body });
  } catch (err) {
    console.error(err);
    res.status(500).send('Internal Server Error');
  }
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:16:16