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替代:- 安装依赖:
npm install body-parser - 修改代码:
const bodyParser = require('body-parser'); // 替换app.use(express.json())为以下代码 app.use(bodyParser.json());
- 安装依赖:
3. 中间件注册顺序错误
确保express.json()(或bodyParser.json())在所有路由之前注册,否则路由处理时中间件未生效,无法解析请求体。你的代码当前顺序正确,后续新增中间件时需注意顺序。
内容的提问来源于stack exchange,提问作者Marvin Lee
相关产品推荐
相关产品推荐

