通过 ajax 将嵌套对象发布到 nodejs 服务器返回未定义

Posting nested object to nodejs server via ajax is returning undefined

几个小时以来我一直在努力解决这个问题,但我似乎找不到问题的原因。

在客户端 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 都被 return 编辑为未定义。 post_data 本身确实 return 数据。

我也尝试使用 JSON.stringify 从 ajax 发送数据,但效果不佳。

我还需要 body-parser 并在 app.js

下使用

我看不出我的问题出在哪里。为什么我的数据未定义?

在您的 ajax() 设置中设置 contentType: 'application/json; charset=UTF-8',否则将使用 application/x-www-form-urlencoded,这就是为什么您会看到按照您的方式格式化数据的原因。

另一个可能的修复方法是在 bodyParser.urlencoded() 中间件选项中设置 extended: true,因为请求发送的是 urlencoded 数据而不是 json(尽管 dataType: "json")服务器端。这将使解析器转换 urlencoded 请求数据,以便按照您的预期创建对象和数组。

对我有用的是在客户端将数组转换为字符串,然后将其转换为 JSON 对象服务器端。