考虑一下这个Ember JS模型:
App.User = DS.Model.extend({
firstName: DS.attr('string')
});
我可以使用它作为XHR请求在服务器上成功保存模型:
{
"user": {
"first_name":"dude"
}
}
但由于某种原因,它在返回此XHR响应时给出了错误:
{
"id":1,
"user":{
"first_name":"dude"
},
"createdAt":"2013-04-12T03:13:52.382Z",
"updatedAt":"2013-04-12T03:13:52.382Z"
}
错误说明: 您的服务器返回了一个包含密钥ID的哈希,但您没有映射
Ember希望输出看起来像:
{
"user": {
"id":1,
"first_name":"dude",
"createdAt":"2013-04-12T03:13:52.382Z",
"updatedAt":"2013-04-12T03:13:52.382Z"
}
}
我认为问题在于请求本身,但我不确定。 请注意,我使用Sails API作为我的后端。
答案 0 :(得分:4)
您可以使用控制器将数据格式编组为您需要的任何内容 - 但这提出了一个有趣的问题,即将不同前端约定的支持添加到API蓝图中。现在,Sails.js API蓝图开箱即用支持Backbone,但显然如果你使用的是Ember,这对你没什么好处:)我在这里创建了一个问题https://github.com/balderdashy/sails/issues/317。
这是一个hacky示例,说明如何使用自定义控制器使用Sails以此格式发送数据:
// api/controllers/UserController.js
module.exports = {
// Create action: (e.g. using default route, you'd POST to /user/create)
create: function (req,res) {
// Grab attributes from request using Ember conventions
var newAttributes = req.param('user');
// Create the user object in the datastore
User.create(newAttributes, function (err, newUser) {
// If there was an error, handle it
if (err) return res.send(err,500);
// Respond with the user object using Ember conventions
res.json({
user: newUser
});
});
}
};
答案 1 :(得分:2)
这是一个格式怪异的JSON响应。你有权访问服务器吗? Ember希望响应为具有根密钥的哈希
{
"user": {
"id":1,
"first_name":"dude",
"createdAt":"2013-04-12T03:13:52.382Z",
"updatedAt":"2013-04-12T03:13:52.382Z"
}
}