我有一个带有rails后端的ember应用程序。
我有一个特定的错误,Rails可以返回(401)我希望Ember抓住并采取行动。在这种情况下,我想执行一个自定义方法(基本上修改请求cookie),然后再次发出请求。
现在我在顶级路由器上捕获此错误并强制整个应用程序使用window.location.reload()重新加载。显然这是一个可怕的黑客。我无法让router.refresh()工作,但无论如何这仍然是一个黑客。
理想情况下,我会更接近适配器,所以我可以采取行动。也许我可以通过覆盖handleResponse()而在适配器级别捕获它,但是如何从那里重试请求?
http://emberjs.com/api/data/classes/DS.RESTAdapter.html#method_handleResponse handleResponse确实传递了requestData,但我需要一些方法在适配器方法的上下文中执行请求,对吧?
答案 0 :(得分:0)
如果路由的模型钩子被拒绝,则调出错误方法
你可以制作一个mixin并将它包装到你的路线上。
import RouteMixin from 'xx/mixins/route';
Ember.Route.extend(RouteMixin, {
})
在RouteMixin中添加一个动作
error: function() {
// this.transitionTo('/not-found');
}
错误的论据。
您可以更改请求参数并重新路由。
答案 1 :(得分:0)
好吧,您可以在应用程序路径中处理此错误(我做了什么):
public static Socket userSocket;
public static Socket getSocket()
{
return userSocket;
}
public static void setSocket(Socket newSocket)
{
userSocket=newSocket;
}
它可能看起来像#34;太高级别",但它是你如何处理余烬中的错误。前段时间我写了一篇关于错误处理的post,你可以看一下你是否感兴趣。 当然,您可能希望扩展适配器来处理错误,但我不建议这样做。首先,您将无法访问适配器方法中的路由/控制器。其次,它不是" ember方式"。适配器应该返回一个promice,如果出现错误将被拒绝,它不应该以任何其他方式处理错误。