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使用,这就是为什么您会看到按照您的方式格式化的数据。

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

于 2015-08-01T21:08:08.523 回答
0

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

于 2020-04-10T18:33:31.873 回答