Ember.JS:您的服务器返回了一个带有密钥ID的哈希,但是您没有映射

时间:2013-04-12 03:56:02

标签: ember.js ember-data sails.js

考虑一下这个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作为我的后端。

2 个答案:

答案 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"
   }
}