我是JS的新手。并且有一个基本的愚蠢怀疑。请耐心等待。我想发送以下表格的请求:
{"user":{"username":"myuser","password":"mypass","role":"myrole"}, "organization":"org_name"}
这样,req.body.user
可以访问用户对象,req.body.organization
可以访问组织。
但是当我发送此请求时:
它转换为 -
{
"user[username]": "myuser",
"user[password]": "mypass",
"user[role]": "myrole",
"organization": "org_name"
}
当我发送
时{"user":{"username":"myuser","password":"mypass","role":"myrole"}}
然后我可以使用req.body.user
访问,但不是上面提到的方式。为什么会这样?
如何立即发送请求,以便我可以正确访问request.body.user
和req.body.organization
?
修改:
这是请求的发送方式。前端:余烬,后端节点/快递:
Ember.$.post("http://"+window.location.hostname+":3000/api/organizations/customer",{"user":{"username":"myuser","password":"mypass","role":"myrole"}, "organization":"org_name"},function(data){
console.log(JSON.stringify(data),null, " ");
});
接收方:
console.log(JSON.stringify(req.body,null," "));
我正在尝试创建用户,但req.body.user未定义。虽然我可以使用用户[用户名]并继续,但这就是我现在想做的事情
答案 0 :(得分:3)
您没有向服务器发送JSON。将对象作为data
传递不会将其作为对象发送;它只是转换为查询字符串[source]。如果要发送JSON,则需要对发送的数据使用JSON.stringify,而不是您收到的数据。
Ember.$.post("http://"+window.location.hostname+":3000/api/organizations/customer",JSON.stringify({"user":{"username":"myuser","password":"mypass","role":"myrole"}, "organization":"org_name"}),function(data){
console.log(data);
});
答案 1 :(得分:0)
在克里斯蒂安·瓦尔加对这篇文章的回答的帮助下,我可以进一步深入探讨。虽然问题仍未解决,但它提供了一些有关如何解决的见解。
这就是我接下来为这种结构所做的事情。根据他的建议,我使用JSON.stringify
,但在不同的地方:
Ember.$.post("http://"+window.location.hostname+":3000/api/organizations/customer",{"user":JSON.stringify({"username":"myuser","password":"mypass","role":"myrole"}), "organization":"org_name"},function(data){
console.log(data);
});
在后端服务器端,我可以收到req.body.user
。但是req.body.user是字符串化的JSON。为了进一步访问这个内部JSON,我不得不使用JSON.parse
。
虽然这很有效,但我一直在寻找更好的解决方案,因为这个后端更改适用于我的前端实现,但是RESTClient失败了。
我知道我需要传递要在post请求中发送的数据的contentType。我找不到contentType的$.post
参数。那么我使用$.ajax
调用。
Ember.$.ajax({
url: "http://"+window.location.hostname+":3000/api/organizations/customer",
type:"POST",
data: JSON.stringify({user:{username:username,password:password,role:role}, organization_id:organization_id}),
contentType: "application/json; charset=utf-8",
dataType:"json",
success: function(data){
console.log(JSON.stringify(data),null, " ");
}
});
其中username, password, role, organization_id
已分配变量。