1. ホーム
  2. ジャバスクリプト

[解決済み】Node.jsとExpressを使用してPOSTするときに、リクエストボディにアクセスするにはどうすればよいですか?

2022-04-02 22:17:07

質問

以下のようなNode.jsのコードを持っています。

var express = require('express');
var app = express.createServer(express.logger());
app.use(express.bodyParser());

app.post('/', function(request, response) {
    response.write(request.body.user);
    response.end();
});

ここで、次のようなPOSTをすると。

curl -d user=Someone -H Accept:application/json --url http://localhost:5000

私は Someone は期待通りです。さて、リクエストの本文を完全に取得したい場合はどうすればよいでしょうか。試しに response.write(request.body) が、Node.js は " という例外を投げます。 第一引数は文字列またはバッファでなければなりません という例外が発生し、quot;無限ループに陥ります。 送信後にヘッダーを設定することはできません。 を実行しても同様です。 var reqBody = request.body; と書いてから response.write(reqBody) .

ここで何が問題なのか?

また express.bodyParser() ?

解決方法は?

Express 4.0以上。

$ npm install --save body-parser

そして、あなたのnodeアプリで。

const bodyParser = require('body-parser');
app.use(bodyParser);


Express 3.0以下。

cURLの呼び出しにこれを渡してみてください。

--header "Content-Type: application/json"

で、データがJSON形式であることを確認します。

{"user":"someone"}

また、以下の例のように、node.jsのコード内でconsole.dirを使用すると、オブジェクト内のデータを確認することができます。

var express = require('express');
var app = express.createServer();

app.use(express.bodyParser());

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

app.listen(3000);

この他の質問も参考になるかもしれません。 express node.js の POST リクエストで JSON を受信する方法は?

もしbodyParserを使いたくないのであれば、この他の質問を参照してください。 https://stackoverflow.com/a/9920700/446681