突然、私のすべてのプロジェクトでこれが起こりました。
Express を使用して nodejs で投稿を作成するたびに、body-parser はreq.body
空のオブジェクトになります。
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded())
// parse application/json
app.use(bodyParser.json())
app.listen(2000);
app.post("/", function (req, res) {
console.log(req.body) // populated!
res.send(200, req.body);
});
Ajax と Postman 経由の場合、常に空になります。
しかし、curl経由で
$ curl -H "Content-Type: application/json" -d '{"username":"xyz","password":"xyz"}' http://localhost:2000/
意図したとおりに動作します。
Content-type : application/json
前者では手動で設定しようとしましたが、その後は常に400 bad request
これには気が狂いそうになりました。
body-parser で何かが更新されたためだと思いましたが、ダウングレードしても効果はありませんでした。
ご協力いただければ幸いです。ありがとうございます。
ベストアンサー1
Postman では、コンテンツ タイプに使用できる 3 つのオプションのうち、「X-www-form-urlencoded」を選択すると機能するはずです。
また、エラー メッセージを削除するには、次のように置き換えます。
app.use(bodyParser.urlencoded())
と:
app.use(bodyParser.urlencoded({
extended: true
}));
見るhttps://github.com/expressjs/body-parser
'body-parser'ミドルウェアはJSONとURLエンコードされたデータのみを処理し、マルチパートは処理しません。
@SujeetAgrahari が述べたように、body-parser は現在 express.js に組み込まれています。
最新バージョンのJSON本文でこれを実装するには、を使用しますapp.use(express.json());
。URLエンコードされた本文(HTTPフォームPOSTによって生成されるもの)の場合は、app.use(express.urlencoded());