2016-07-07 14 views
2

Meteor.jsでグローバル例外/エラーハンドラを追加する方法を教えてください。たくさんのコードを調べましたが、誰もグローバルメソッドを説明していません...すべての人がMeteor.callごとにキャッチしたり、非同期コールバックを追加するだけです。しかし、私は怠け者です。Meteor.Errorsをすべて処理するコードがほしいだけです。ほとんどの場合、すでにクライアントが読めるエラーです。だから私は彼にそれを示さなければならない。Meteorエラー処理

私が使用することをしようと試み:

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

が、そのだけではないMetero.Errorのための通常のJavaScriptのエラーのために働いて..私はそこにそれをキャッチすることができます前に、流星はそれをキャッチしていることのようです。

答えて

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 = function(){ 
    if(!Meteor.user()){ 
     throw new Meteor.Error(400, 'You are not a unicorn yet! I mean, user.') 
    } 
} 

をし、方法で私はそれを使用するcheckUser();を記述します。たとえば、私はこのように自分のサーバーにcheckUser()を持っています。

編集: これらのグローバル関数は他のコードブロック内にありません。ただそれらをスタンドアロンにしてください

+0

ユースthatsは流星を使用する標準的な方法です。すべての呼び出しにhandleErrorを追加する必要があります。しかし、1つのエラー処理を忘れると、このコードを見つけることができます。また、コールバック関数を追加すると、呼び出しは非同期になります。私はすべての呼び出しにエラー処理を追加する必要はありませんグローバルソリューションを探しています。 – Kani

+0

hmm私は今理解しています。申し訳ありませんが、私は知らない。 – Luna