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

Express POST请求返回空body,使用body-parser遇语法错误求助

解决Express中body-parser解析POST请求为空或报错的问题

嘿,我来帮你搞定这个POST请求解析的问题!你遇到的情况其实是请求Content-Type不匹配和请求体格式问题共同导致的,咱们一步步来解决:

问题原因分析

  1. 指定type: 'application/*+json'时输出{}:
    你设置的这个type规则只匹配application/xxx+json这种带后缀的JSON媒体类型(比如application/vnd.api+json),但大多数前端发送JSON请求时用的是标准的application/json,这个类型不在匹配范围内,所以body-parser根本没解析请求体,自然req.body是空对象。

  2. 不指定type时出现Syntax Error:
    这说明你的请求头里可能标记了Content-Type: application/json,但请求体本身不是合法的JSON格式(比如有语法错误、用了FormData格式而非JSON字符串),导致body-parser解析失败抛出错误。

解决方案步骤

1. 先确认前端请求的正确性

首先要保证前端发送请求时满足两个条件:

  • 请求头里必须包含 Content-Type: application/json
  • 请求体是合法的JSON字符串,比如:
    {"text": "这是一条测试消息"}
    
    注意不能用FormData、URL编码格式,必须是纯JSON字符串。

2. 修正body-parser的配置

把自定义的type选项去掉,用默认的bodyParser.json()即可,它会自动解析标准application/json类型的请求:

修正后的完整代码

var app = require('express')();
var bodyParser = require('body-parser');
var port = 1200;
// 注意:这里要定义messages变量,不然GET接口会报错
var messages = [];

console.log('Server is up at ' + port);

// 用默认配置解析application/json类型的请求
app.use(bodyParser.json());

app.use(function (req, res, next) {
  console.log('app.use entered...');
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

app.get('/msgboard', function(req, res) {
  console.log('app.get entered...');
  res.json(messages);
});

app.post('/message', function (req, res) {
  console.log(req.body);
  // 可以把收到的消息存到messages数组里
  messages.push(req.body);
  res.sendStatus(200);
});

app.listen(port);

3. 如果确实需要自定义媒体类型

如果你因为某些原因必须处理application/*+json这类非标准JSON类型,那可以同时支持标准JSON和自定义类型,比如:

app.use(bodyParser.json({ type: ['application/json', 'application/*+json'] }));

这样两种类型的请求都会被正确解析。

额外提示

测试POST请求时,可以用Postman或者curl命令来验证:

curl -X POST -H "Content-Type: application/json" -d '{"text":"Hello World"}' http://localhost:1200/message

执行后看控制台是否输出正确的请求体内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:50:01