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

Node.js POST请求中req.body值为undefined及属性读取失败问题求助

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

看起来你遇到的核心问题是Express没有配置解析JSON请求体的中间件,导致req.body始终是undefined,进而触发了"cannot read value of undefined"的错误。我之前调试类似问题时也踩过这个坑,下面给你一步步的解决方案:

1. 配置JSON解析中间件(关键步骤)

Express默认不会自动解析JSON格式的请求体,你需要在应用的入口文件(比如app.js/server.js)中添加express.json()中间件,而且必须在挂载路由之前配置,否则路由无法获取到解析后的请求体:

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

// 这一步是核心!必须放在路由挂载之前
app.use(express.json());

// 然后挂载你的用户路由
const userRouter = require('./routes/user'); // 替换成你的路由文件实际路径
app.use('/api/users', userRouter);

// 启动服务器
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Server running on port ${port}`));

2. 检查请求的Content-Type头

确保前端发送POST请求时,正确设置了Content-Type: application/json头。如果请求头不对,express.json()会跳过解析,req.body依然是undefined:

  • 用Postman测试时,在"Headers"标签里添加Content-Type为application/json
  • 前端代码示例(Fetch):
fetch('/api/users', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: "张三",
    email: "zhangsan@example.com",
    phone: "13800138000",
    password: "123456"
  })
})

3. 兼容旧版本Express(可选)

如果你的Express版本低于4.16.0,express.json()还没被内置,需要单独安装body-parser包:

npm install body-parser

然后在入口文件中使用:

const bodyParser = require('body-parser');
app.use(bodyParser.json());

验证你的路由代码

你的路由逻辑本身没有问题,只要配置好中间件,req.body就能正常获取到,后续的validate(req.body)和User.findOne等操作也能正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 08:13:12