投稿のreq.bodyが空です 質問する

投稿のreq.bodyが空です 質問する

突然、私のすべてのプロジェクトでこれが起こりました。

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

おすすめ記事