【问题标题】:Ember-Data handling 401’sEmber 数据处理 401
【发布时间】:2013-07-31 21:46:57
【问题描述】:

对处理 401 错误有什么想法吗?

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

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

我注意到有一个similar topic here,但它似乎已经过时了。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    之前的答案已经过时了。在当前的 Ember 版本 (1+) 中,events 已弃用,您应该使用 actions object(而不是函数)。

    Ember 示例:

    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
        }
      }
    });
    

    Ember 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
        }
      }
    });
    

    使用这些操作处理程序,如果您之前没有在路由中停止它,错误将很好地冒泡到主应用程序路由。

    【讨论】:

      【解决方案2】:

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

      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
          }
        }
      });
      

      【讨论】:

      • 太棒了!之前我不知道Model 存在。尽管当我尝试从我的 API 获取经过身份验证的用户并随后向用户显示登录表单来代替内容时,我仍然无法捕捉到预期的 401 错误。当 401 回来时,错误功能似乎没有被击中。有什么想法吗?
      • 有一些错误,承诺会吞下一些异常,这可能是一个。尝试在服务器上引发 500 错误,看看是否会触发处理程序。
      • 从 Ember Data v1.0.0-b3 开始,此功能有效(附注:events 应重命名为 actions,因为前者已被弃用。
      • 除了上面的注释,eventsactions 应该是一个对象,而不是一个函数。
      • 请注意,events 对象中包含的操作处理程序已被弃用,而是将它们放入 actions 对象中。
      猜你喜欢
      • 2015-07-07
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 2017-03-03
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      相关资源
      最近更新 更多