Express中req.body为空对象{},获取值显示undefined的问题
解决req.body为undefined的问题
问题出在客户端的fetch请求未正确格式化请求体,导致服务器无法解析。以下是修复步骤:
1. 修复客户端fetch请求
在postMessages函数中,需要将JavaScript对象序列化为JSON字符串,并设置Content-Type请求头为application/json,确保服务器能识别并解析请求体:
function postMessages(message) { const Url = "http://localhost:3000/messages" fetch(Url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(message), }) }
2. 优化服务器端代码(可选)
Express 4.16.0及以上版本已内置express.json()和express.urlencoded()中间件,无需单独安装body-parser,可替换原代码中的body-parser引用:
var express = require('express') var app = express() app.use(express.static(__dirname)) // 用内置中间件替代body-parser app.use(express.json()) app.use(express.urlencoded({ extended: false })) var messages = [ { name: "Tim", message: "Hi" }, { name: "Jane", message: "Hello" } ] app.post('/messages', (req, res) => { console.log(req.body) messages.push(req.body) res.sendStatus(200) }) // 补充监听端口代码,确保服务器启动 app.listen(3000, () => { console.log('Server running on port 3000') })
问题原因说明
- 原fetch请求直接传入JavaScript对象作为
body,fetch不会自动将其序列化为JSON,也不会设置正确的Content-Type头。 - 服务器端的
bodyParser.json()(或express.json())仅解析Content-Type为application/json的请求体,缺少正确的请求头和序列化内容时,中间件无法解析,导致req.body为undefined。
内容的提问来源于stack exchange,提问作者hritik
相关产品推荐
相关产品推荐

