web-dev-qa-db-ja.com

Node JS / Express JSおよびPostmanを使用してPOSTデータを取得できません

これは私のサーバーのコードです:

var express = require('express');
var bodyParser = require("body-parser");
var app = express();
app.use(bodyParser.json());

app.post("/", function(req, res) {
    res.send(req.body);
});

app.listen(3000, function () {
    console.log('Example app listening on port 3000!');
});

Postmanから、POSTへのリクエスト http:// localhost:3000 / へのリクエストを起動し、Body/form-dataにキー "foo"と値 "バー"。

ただし、応答で空のオブジェクトを取得し続けます。 req.bodyプロパティは常に空です。

私は何か見落としてますか? - enter image description here

14
user2923322

リクエストのエンコーディングを追加します。ここに例があります

..
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
..

次に、Postmanでx-www-form-urlencodedを選択するか、Content-Typeをapplication/jsonに設定してrawを選択します

rawを使用するための編集

{
  "foo": "bar"
}

ヘッダー

Content-Type: application/json

EDIT#2チャットからの質問に答える:

  1. なぜフォームデータで動作しないのですか?

確かに、この答えを見てください Express 4からFormDataを処理する方法

  1. x-www-form-urlencodedrawの違いは何ですか

application/jsonとapplication/x-www-form-urlencodedの違い

26
R. Gulbrandsen
let express = require('express');
let app = express();

// For POST-Support
let bodyParser = require('body-parser');
let multer = require('multer');
let upload = multer();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/api/sayHello', upload.array(), (request, response) => {
    let a = request.body.a;
    let b = request.body.b;


    let c = parseInt(a) + parseInt(b);
    response.send('Result : '+c);
    console.log('Result : '+c);
});

app.listen(3000);

JSONのサンプルとJSONの結果:

Sample Json and result of the json

Content-typeLアプリケーション/ JSONを設定します。

Set Content-type: application/json

1
Goutam Ghosh

追加したいのは、app.jsのExpress.jsジェネレーターを介してプロジェクトを作成した場合、次のコードも生成されることです。

app.use(express.json());

bodyパーサーをこのコードの上に置くと、req.bodyはnullまたはundefinedを返します。上のコードの下に置く必要があります。正しい配置については、以下を参照してください。

 app.use(express.json());
 app.use(bodyParser.urlencoded({extended:true}));
 app.use(bodyParser.json());
0
MJVM

ルーターの使用中にこの問題が発生しました。 GETのみが機能し、POST、PATCH、および削除がreq.bodyの「未定義」を反映していました。ルーターファイルでbody-parserを使用した後、すべてのHTTPメソッドを機能させることができました...

ここに私がそれをした方法があります:

...
const bodyParser = require('body-parser')
...
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: true }));
...
...
// for post
router.post('/users', async (req, res) => {
    const user = await new User(req.body) // here is where I was getting req.body as undefined before using body-parser
    user.save().then(() => {
        res.status(201).send(user)
    }).catch((error) => {
        res.status(400).send(error)
    })
})

PATCHとDELETEについても、user568109によって提案されたこのトリックは機能しました。

0
Balepur