从ember route错误中获取堆栈跟踪

时间:2014-07-26 19:15:33

标签: ember.js ember-router ember-cli

我浏览了this presentation并将必要的Ember.onerror(error);添加到应用程序路由的错误操作中。但是,当我尝试记录错误时,我得到的似乎是路由对象(不确定它是什么)。我需要采取一些额外的步骤吗?我正在使用Ember CLI v.40和Ember v1.6.1。

// routes/application.js
import Ember from 'ember';

export default Ember.Route.extend({
    actions: {
        ...

        error: function(error) {
            Ember.onerror(error);
            return true;
        }
    }
});


// initializers/bugsnag.js
import Ember from 'ember';

export default {
    name  : 'bugsnag',
    after : 'ajax-prefilter',

    initialize: function(container) {
        var appController, currentRoute;

        try {
            appController = container.lookup('controller:application');
            currentRoute  = appController.get('currentPath');
        } catch(e) {}

        var context = { currentRoute: currentRoute };

        Ember.onerror = function(error) {
            // do something with error
            console.log(error.stack) // undefined on route error
        };
    }
};

我在控制台中得到以下内容(由ember生成,而不是我的代码),这是我试图在初始化程序中获取的信息:

Error while processing route: calendar.create

1 个答案:

答案 0 :(得分:1)

我在路由错误处理方法中一直使用console.trace()。

Em.Logger.log(error.stack);
if(! Em.isNone(console)) {
  console.trace();
}

这通常会产生足够的信息来进一步调试问题。请注意,使用Em.Logger而不是console.log,它将处理某些浏览器没有定义控制台的情况。