1

私はすでに数時間これを理解しようとしていますが、問題の原因を見つけることができないようです.

クライアント側の Javascript では、ネストされたオブジェクトを ajax 経由でバックエンドの nodejs サーバーに投稿しています。ajax は次のようになります。

$.ajax({
  type: "POST",
  url: "/user/save",
  data: {
    "account": {
      "username": $signupForm.find("input[name='register_username']").val(),
      "email": $signupForm.find("input[name='register_email']").val(),
      "password": $signupForm.find("input[name='register_password']").val(),
      "plan": subscription
    },
    "stripe": stripeResponse
  },
  dataType: "json",
  beforeSend: function(){
    $.fn.showLoading();
  },
  success: function(data){

  }
});

次に、routes/index.js でこれをキャッチします

router.post('/user/save', function(req, res){
  var post_data = req.body;
  console.info(post_data);

  var account = post_data.account;
  var card = post_data.stripe;

  console.log(account);
  console.log(card);

  // Rest of code...

ここでの問題は、何らかの理由で と の両方post_data.accountpost_data.stripe未定義として返されることです。post_data 自体は実際にデータを返します。

また、 ajax を使用してデータを送信しようとしましJSON.stringifyたが、うまくいきませんでした。

また、body-parser が必要で、app.js で使用しています

問題がどこにあるのかわかりません。データが定義されていないのはなぜですか?

4

2 に答える 2

2

設定で設定contentType: 'application/json; charset=UTF-8'しますajax()。それ以外の場合application/x-www-form-urlencodedは使用されます。これが、データが自分のやり方でフォーマットされている理由です。

リクエストが json の代わりに urlencoded データを送信しているため (にもかかわらずdataType: "json")、別の可能な修正は、サーバー側でミドルウェア オプションを設定extended: trueすることです。bodyParser.urlencoded()これにより、パーサーは、オブジェクトと配列が期待どおりに作成されるように、urlencoded リクエスト データを変換します。

于 2015-08-01T21:08:08.523 に答える