6

bodyParser の Express でエラーが発生し、PUT リクエストを解析できません...私の設定は次のように設定されています。

 app.use(express.bodyParser());
 app.use(express.methodOverride());
 app.use(express.query());
 app.use(app.router);

ただし、エンドポイントに PUT リクエストを送信するたびに、req.body は「未定義」として返されます。

私はChromes RESTコンソールを介してリクエストを作成しようとしましたが、次のようなjQuery ajaxリクエストも使用しました:

 $.ajax({
     url: 'https://localhost:4430/api/locations/5095595b3d3b7b10e9f16cc1',
     type: 'PUT',
     data: {name: "Test name"},
     dataType: 'json'
 });

何か案は?

4

1 に答える 1

6

また、Content-Type を に設定する必要がありますapplication/json。jQuery リクエストは次のようになります。

$.ajax({
     url: 'https://localhost:4430/api/locations/5095595b3d3b7b10e9f16cc1',
     type: 'PUT',
     contentType: 'application/json',
     data: JSON.stringify({name: "Test name"}),
     dataType: 'json'
 });

それ以外の場合、本文パーサーは本文の解析を試みません。

編集:ここに私のテストコードがあります

  1. 走るexpress test

  2. /testにルートを追加しapp.jsます。

app.all('/test', routes.test);

routes/index.js:

exports.test = 関数 (req, res) {
  console.log(req.body);
  res.send({ステータス: 'OK'});
};
  1. index.jade で jQuery と次のスクリプトをリンクします。
$(関数 () {
  $('#test').click(関数 () {
    $.ajax({
      URL: '/テスト',
      タイプ: 'PUT',
      contentType: 'アプリケーション/json',
      data: JSON.stringify({name: "テスト名"}),
      データ型: 'json'
    });
  });
});

これを実行すると、次のログが表示されます。

ポート 3000 でリッスンする Express サーバー
GET / 200 26ms - 333
GET /stylesheets/style.css 304 2ms
GET /javascripts/test.js 304 1ms
{ name: 'テスト名' }
PUT /テスト 200 2ms - 20
于 2012-11-28T11:08:14.893 に答える