web-dev-qa-db-ja.com

リクエスト本文のJSONデータがbody-parserを使用して解析されていません

POST postmanを使用してリクエストをlocalhost:8080/api/newUserにリクエスト本文とともに送信すると:

{name: "Harry Potter"}

サーバー側でconsole.log(req.body)は次のように出力します。

{ '{name: "Harry Potter"}': '' }

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);

私は何が間違っているのですか?

12
Sree.Bh

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);
11
alexmac

リクエストヘッダーを変更します

'Content-Type':'application/json'

BodyParserが本体を解析できるようにします。

*それは私のために働くものです。私はexpress(body-parser)でangular 2+を使用しています

6