如何在javascript中制作这样的结构

时间:2015-04-22 07:29:15

标签: javascript node.js

我是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.userreq.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未定义。虽然我可以使用用户[用户名]并继续,但这就是我现在想做的事情

2 个答案:

答案 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已分配变量。