我使用的是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响应。
答案 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的更多信息: