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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:33:21