次の JSON 文字列をサーバーに送信しています。
(
{
id = 1;
name = foo;
},
{
id = 2;
name = bar;
}
)
サーバー上にこれがあります。
app.post('/', function(request, response) {
console.log("Got response: " + response.statusCode);
response.on('data', function(chunk) {
queryResponse+=chunk;
console.log('data');
});
response.on('end', function(){
console.log('end');
});
});
文字列を送信すると、200 応答が返されたことが示されますが、他の 2 つのメソッドは実行されません。なぜでしょうか?
ベストアンサー1
response
オブジェクトの使用と の使用を混同していると思いますrequest
。
オブジェクトresponse
はHTTPレスポンスを呼び出しクライアントに返すためのものですが、ここでは の本体にアクセスしたいと考えていますrequest
。こちらを参照してください。答えこれはいくつかのガイダンスを提供します。
有効なJSONを使用していて、それをPOSTしている場合はContent-Type: application/json
、bodyParser
リクエスト本文を解析し、結果をrequest.body
ルートに配置するミドルウェア。
Express 4.16+ のアップデート
リリース4.16.0から、新しいexpress.json()
ミドルウェアが利用可能です。
var express = require('express');
var app = express();
app.use(express.json());
app.post('/', function(request, response){
console.log(request.body); // your JSON
response.send(request.body); // echo the result back
});
app.listen(3000);
Express 4.0 - 4.15 に更新されました
ボディパーサーはv4以降、独自のnpmパッケージに分割され、別途インストールが必要です。npm install body-parser
var express = require('express')
, bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
app.post('/', function(request, response){
console.log(request.body); // your JSON
response.send(request.body); // echo the result back
});
app.listen(3000);
Expressの以前のバージョン(< 4)の場合
var express = require('express')
, app = express.createServer();
app.use(express.bodyParser());
app.post('/', function(request, response){
console.log(request.body); // your JSON
response.send(request.body); // echo the result back
});
app.listen(3000);
次のようにテストします。
$ curl -d '{"MyKey":"My Value"}' -H "Content-Type: application/json" http://127.0.0.1:3000/
{"MyKey":"My Value"}