2013-07-31 60 views
7

任何想法处理401错误?灰烬 - 数据处理401的

在应用程序初始化程序中,我推迟准备并通过ember-data获取当前用户。如果我收到一个401应用程序死亡,并变得无法使用。我想处理这个错误,然后提前回复。我似乎无法找到解决方法。任何信息,将不胜感激!

要点在这里:https://gist.github.com/unknpwn/6126462

我注意到有一个similar topic here,但它似乎是过时的。

回答

2

Application.initializer不是放置此逻辑的正确位置。它是同步的,它的目的是做一些事情,比如将自定义对象添加到IOC容器等等。这个代码更适合model挂钩ApplicationRoute

App.ApplicationRoute = Ember.Route.extend({ 
    beforeModel: function() { 
    return App.User.find({ filter: "authenticated" }); 
    }, 
    setupController: function(controller, model) { 
    controller.set('loggedIn', true); 
    controller.set('currentUser', model);// or some property of that model 
    }, 
    events: function() { 
    error: function(err) { 
     // error handler called in case of an error. 
     // show the error message to user here 
     // or transition to another route 
    } 
    } 
}); 
+0

太棒了!模型存在之前我不知道。尽管我尝试从我的API获取经过身份验证的用户,然后向用户显示登录表单以代替内容,但仍然遇到了捕获预期的401错误的问题。当401回来时,错误功能似乎没有被击中。那里有任何想法? – bmherold

+0

有一些错误承诺会吞噬一些异常,这可能是一个。尝试在服务器上引发500错误,看看是否触发处理程序。 –

+1

从Ember Data v1.0.0-b3开始,这是可行的(附加说明'events'应该重命名为'actions',因为前者已被弃用。 –

4

上一个答案已过时。在当前Ember版本(1+)events已被弃用,您应该使用actions对象(而不是函数)。

灰烬例如:

App.ApplicationRoute = Ember.Route.extend({ 
    actions: { 
    error: function(err) { 
     // error handler called in case of an error. 
     // show the error message to user here 
     // or transition to another route 
    } 
    } 
}); 

灰烬CLI例如:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    actions: { 
    error: function(err) { 
     // error handler called in case of an error. 
     // show the error message to user here 
     // or transition to another route 
    } 
    } 
}); 

有了这些动作处理程序错误将很好地泡在主应用程序的路线,如果你不前,你的路线停止。