ember JSONAPIAdapter无法将数据正确加载到商店

时间:2015-09-21 08:50:30

标签: ember.js ember-data json-api

我使用的是ember-cli和ember-data 1.13.7以及JSONAPIAdapter。 我在本地测试期间使用http-mock来模拟数据。 当我使用RESTAdapter时,它运行良好,但在切换到JSONAPIAdapter时遇到了问题。

问题是记录数据没有加载到商店中,我在读取未定义的属性时出错。

adpater看起来像这样:

import DS from 'ember-data';
export default DS.JSONAPIAdapter.extend({
    namespace: 'api',
});

ajax调用是这样的:

http://localhost:4200/api/users/1

http-mock看起来像这样:

usersRouter.get('/:id', function(req, res) {
 res.send({
  'users': {
    id: req.params.id,
    firstname: "John",
    lastname: "Doe",
    email: "johndoe@example.com",
    mobile: "12345678",
    nextAppointment: 1
  }
 });
});

响应如下:

{"users":{"id":"1","firstname":"John","lastname":"Doe","email":"johndoe@example.com","mobile":"12345678","nextAppointment":1}}

响应数据看起来不错,但问题在于响应是标题状态代码304,以及数据未加载到存储中的事实。创建了id = 1的对象,但是对象中的所有属性都是未定义的'当我在ember检查员中查看商店数据时。

更新

我得到的错误是:

Error while processing route: 
    home.index Cannot read property '_internalModel' of undefined 
    TypeError: Cannot read property '_internalModel' of undefined

更新2: 事实证明,304并不重要。当httpcode为200时,模型仍未正确加载到商店中。 我还认为这个电话可以正常工作:

http://localhost:4200/api/users

此调用失败时:

http://localhost:4200/api/users/1

他们返回完全相同的JSON响应。

1 个答案:

答案 0 :(得分:2)

您的呼吁:

http://localhost:4200/api/users

无法返回exactly the same JSON response

您的电话:http://localhost:4200/api/users/1应该返回:

{
  "data": {
    "id":"1",
    "type": "user",
    "attributes" : {
      "firstname":"John",
      "lastname":"Doe",
      "email":"johndoe@example.com",
      "mobile":"12345678",
      "nextAppointment":1
    }
  }
}

阅读有关JSONAPIAdapter的更多信息: