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

Express JS中req.body返回undefined问题求助

Express中req.body返回undefined的问题分析与解决

问题情况

使用Express编写POST接口时,req.body.name返回undefined,接口仅返回id字段,控制台输出course.name为undefined。

示例代码

const express = require('express');

const app = express();

const courses = [
    { id: 1, name: 'course1'},
    { id: 2, name: 'course2'},
    { id: 3, name: 'course3'},
];

app.use(express.json());

app.get('/api/courses', (req, res) => {
    res.send(courses);
});


app.post('/api/courses', (req, res) =>{
    const course = {
        id: courses.length + 1,
        name: req.body.name
    };
    courses.push(course)
    res.send(course)
});


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

Postman请求内容

提交的JSON数据:

{ 
    "name" : "newCourse"
}

原因分析及解决方法

1. Postman未设置正确请求头

Express的express.json()中间件仅解析Content-Type为application/json的请求体,若Postman未配置该请求头,中间件不会处理请求体,导致req.body为undefined。

解决:
在Postman的Headers标签下添加键值对:

  • Key: Content-Type
  • Value: application/json

2. Express版本过低

express.json()是Express 4.16.0及以上版本才内置的JSON请求体解析中间件,若你的Express版本低于该版本,此方法无效。

解决:

  • 查看当前版本:执行npm list express
  • 升级Express:npm install express@latest
  • 或安装body-parser替代:
    1. 安装依赖:npm install body-parser
    2. 修改代码:
      const bodyParser = require('body-parser');
      // 替换app.use(express.json())为以下代码
      app.use(bodyParser.json());
      

3. 中间件注册顺序错误

确保express.json()(或bodyParser.json())在所有路由之前注册,否则路由处理时中间件未生效,无法解析请求体。你的代码当前顺序正确,后续新增中间件时需注意顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:55:29