我一直试图解决这个问题几个小时但我似乎无法找到问题的原因。
在客户端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.account
和post_data.stripe
都是未定义的。 post_data本身确实返回了数据。
我也尝试使用JSON.stringify
从ajax发送数据但是效果不佳。
我还需要在app.js下使用正文解析器
我看不出我的问题在哪里。为什么我的数据未定义?
答案 0 :(得分:2)
在contentType: 'application/json; charset=UTF-8'
设置中设置ajax()
,否则使用application/x-www-form-urlencoded
,这就是您按照自己的方式查看数据格式的原因。
另一种可能的解决方法,因为请求是发送urlencoded数据而不是json(尽管dataType: "json"
),是在服务器端的bodyParser.urlencoded()
中间件选项中设置extended: true
。这将使解析器转换urlencoded请求数据,以便按照您的预期创建对象和数组。
答案 1 :(得分:0)
对我有用的是在客户端将数组转换为字符串,然后将其转换为JSON对象服务器端。