2016-07-07 117 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