これは私のサーバーのコードです:
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
プロパティは常に空です。
リクエストのエンコーディングを追加します。ここに例があります
..
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チャットからの質問に答える:
確かに、この答えを見てください Express 4からFormDataを処理する方法
x-www-form-urlencoded
とraw
の違いは何ですか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の結果:
Content-typeLアプリケーション/ JSONを設定します。
追加したいのは、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());
ルーターの使用中にこの問題が発生しました。 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によって提案されたこのトリックは機能しました。