2016-07-07 118 views
2

如何在Meteor.js中添加全局异常/错误处理程序。我浏览了这么多的代码,但没有人解释一个全局方法......每个人都会尝试捕捉每个Meteor.call或者添加一个异步回调。但我很懒,我只想处理所有Meteor.Errors的一段代码。大多数情况下,这已经是客户端可读的错误。所以我只需要向他展示它。流星错误处理

我tryed使用方法:

$(window).error(function(error) { 
    const errorText = T9n.get("Exception." + error.originalEvent.error.error); 
    View.toast(errorText); 
}); 

但它只是工作正常的JavaScript错误不是Metero.Error ..似乎是流星抓住这一点,之前我能赶上它。

回答

2

我不知道这是否正是你需要的,但是,这里有一个解决方案。

在每Meteor.call(),有这样的:

Meteor.call('contactForm', arg1, arg2, function(err, res){ 
    handleError(err, res); 
}); 

在您的客户端定义一个可重用的错误处理程序:

handleError = function (err, res){ 
    if(err){ 
     //do something with the error sent from server. not the ugly alert() like this code. 
     alert('error!') 
    } else{ 
     //do something if no errors. 
     alert('done!') 
    } 
} 

当然,你必须确定你的错误并在您的方法结果,但这解决了在客户端一遍又一遍地写同样的东西。你也可以在你的服务器端定义上面的handleError这样的助手。例如,我有checkUser()在我的服务器这样的:

checkUser = function(){ 
    if(!Meteor.user()){ 
     throw new Meteor.Error(400, 'You are not a unicorn yet! I mean, user.') 
    } 
} 

和方法,我只是写checkUser();使用它。

编辑: 这些全局函数不在任何其他代码块内。只是让他们独立

+0

是的,这是如何使用流星的标准方式。你必须添加到每个调用handleError。但是当你忘记一个错误处理时,你就会发现这个代码。当你添加回调函数时,调用也是异步的。我正在寻找一种全球性的解决方案,我不必为每次调用添加错误处理。 – Kani

+0

嗯我现在明白了。对不起,我不知道。 – Luna