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

JS中POST请求发送对象异常:返回值无法解析为对象求助

问题:Express POST请求返回的对象无法被前端解析

在Express的POST请求处理函数中创建了ob对象,控制台用console.log能正常输出该对象,但尝试返回时,前端无法将返回值解析为对象。试过直接用res.status(200).send(ob),也试过返回JSON.stringify(ob),两种方式都不行。

代码示例:

app.post('/', (req, res) => {
        var ob = {
            id: Math.random().toString(),
            username: req.body.username
        }

        console.log("object is");
        console.log(ob);

        res.status(200).send(JSON.stringify(ob));  
}

原因及解决方案

1. 两种返回方式的问题

  • 直接用res.send(ob):Express的res.send()虽能自动将对象转为JSON字符串,但偶尔会因响应头Content-Type未正确设置为application/json,导致前端无法识别返回内容为JSON格式,进而解析失败。
  • 用JSON.stringify(ob)返回:手动转字符串后,res.send()会把响应头设为text/plain,前端默认不会将纯文本解析为JSON对象,除非前端手动调用JSON.parse(),这并非规范做法。

正确做法:使用res.json()

Express提供的res.json()方法会自动完成以下关键操作:

  • 将对象序列化为JSON字符串
  • 设置响应头Content-Type: application/json
  • 自动适配状态码(也可先设置状态码再调用)

修改后的代码:

app.post('/', (req, res) => {
        var ob = {
            id: Math.random().toString(),
            username: req.body.username
        }

        console.log("object is");
        console.log(ob);

        // 自动处理序列化与响应头,确保前端能识别为JSON
        res.status(200).json(ob);  
}

额外检查点

确保你已在Express应用中配置了请求体解析中间件,否则req.body.username会为undefined:

// 需在定义路由之前添加
app.use(express.json());
// 若需处理表单数据,可补充
app.use(express.urlencoded({ extended: true }));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:01:19