1. ホーム
  2. json

[解決済み] Express アプリケーションで JSON POST データを消費する方法

2022-03-15 17:14:16

質問

次のような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つのメソッドは実行されることはありません。なぜでしょうか?

解決方法は?

の使い方を混同しているのではないでしょうか? response オブジェクトと request .

response オブジェクトはクライアントに HTTP レスポンスを返すためのものであり、あなたがアクセスしたいのは request . これを見てください 答え は、いくつかのガイダンスを提供しています。

有効なJSONを使用していて、そのJSONを 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"}