请求正文中的JSON数据未使用正文解析器进行解析

Sre*_*.Bh 12 node.js express body-parser

当我使用postman发送POST请求到localhost:8080/api/newUser with request body:

{name: "Harry Potter"}
Run Code Online (Sandbox Code Playgroud)

在服务器端,console.log(req.body)打印:

{ '{name: "Harry Potter"}': '' }
Run Code Online (Sandbox Code Playgroud)

server.js

var express = require('express'); 
var app = express();
var router = express.Router();
var bodyParser = require('body-parser');

app.use('/', express.static(__dirname));

router.use(function(req, res, next) {
    next();
});

router
    .route('/newUser')
    .post(function(req, res) {
        console.log(req.body);
    });

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); // support json encoded bodies
app.use('/api', router);

app.listen(8080);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

ale*_*mac 11

在express.js中,声明中间件的顺序非常重要.bodyParser中间件必须早于您自己的中间件(api端点)定义.

var express = require('express'); 
var app = express();
var router = express.Router();
var bodyParser = require('body-parser');

app.use('/', express.static(__dirname));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); // support json encoded bodies

router
    .route('/newUser')
    .post(function(req, res) {
        console.log(req.body);
    });

app.use('/api', router);

app.listen(8080);
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,解决方案是为 curl 设置正确的标题“Content-Type: application/json” (2认同)

ber*_*gle 6

更改请求标头

'Content-Type':'application/json'
Run Code Online (Sandbox Code Playgroud)

这样bodyParser就可以解析身体了.

*这对我有用.我使用角度2+与快递(身体解析器)