【发布时间】:2014-12-04 23:12:46
【问题描述】:
当我请求一个返回 404(或 403)的资源时,Ember Data 正在创建本地记录。
例如,我在/items/123 从头开始加载我的应用程序。适配器对GET /items/123 发出请求,结果为404,但现在我在本地商店中有item 记录,id=123。所有属性都是undefined 期望模型定义默认值的地方。
此外,所有模型标志都是false,除了isValid true。
这是例外行为吗?即使服务器说它不存在(或者不允许用户查看它),本地记录也会被创建,这似乎很奇怪。
详情
我正在运行 Ember 1.8.1 和 Ember Data 1.0.0-beta.11。
这是我对 Routes 的看法——非常基本的东西:
// itemsRoute, TOP LEVEL
model: function() {
return this.store.find('item');
}
// itemRoute, CHILD LEVEL
model: function(params) {
return this.store.find('item', params.item_id); // <-- this returns 404
},
actions: {
error: function(err) {
this.replaceWith('items'); // jump out to main list view
return true; // ensure error bubbles up
}
}
model 挂钩中的拒绝正在起作用,因为触发了 error 操作,并且我被重定向到顶级 /items 视图。但我仍然会得到一个不存在的 item 的本地记录。
【问题讨论】:
-
我还没有看到这种情况发生。您确定服务器实际上返回 404 吗?询问它是否以某种自定义“404”实现响应但实际上在标题中返回 200。如果没有,您能否提供一些代码示例来帮助更好地理解该行为?
-
服务器正在返回正确的 404 代码(屏幕截图:cl.ly/Yq8W)。我从我的路线中添加了一些代码 sn-ps...我认为这是非常基本的东西。
-
我觉得有点奇怪。我想知道它 replaceWith() 的行为与我们假设的不同。由于失败,我无法复制这个 phantom null 记录,但如果没有其他方法,您可以考虑覆盖适配器的 ajaxSuccess 和/或 ajaxError 方法。
-
确实很奇怪。我已经能够在适配器中捕捉到
ajaxError中的错误,但我还没有采用这种方法。 -
这个有点丑。您还可以覆盖 afterModel [aftermodel(model, transition)] 方法并在转换显示 404 的实例中重新加载模型。虽然它不是很优雅。 Hrm... 服务器返回 404 错误而不是空数据集或带有错误属性的 JSON 响应是否有原因?
标签: ember.js ember-data http-status-code-404