[英]Error handle in Meteor in calling server side method
我調用了一種從服務器/ publicationMehods刪除家庭的方法,如下所示:
deletedFamily(family) {
if (Meteor.user().roles[0] == "admin") {
var myUsers = Meteor.users.find({"profile.family_id": family._id}).fetch();
for (var i = 0; i < myUsers.length; i++) {
UsersDeleted.insert(myUsers[i]);
Meteor.users.remove(myUsers[i]);
}
var myGuests= Guests.find({"profile.family_id": family._id}).fetch();
for (var i = 0; i < myGuests.length; i++) {
GuestsDeleted.insert(myGuests[i]);
Guests.remove(myGuests[i]);
}
FamiliesDeleted.insert(family);
Families.remove(family);
}
}
我想處理異常並在發生任何錯誤時捕獲它,並在前端顯示結果。 我知道流星上沒有任何交易。 但是我至少需要向用戶顯示結果。
在Meteor中,如果要從Meteor方法向用戶返回錯誤,則拋出異常,但必須是Meteor.Error
異常對象才能將其發送回客戶端。
在客戶端,當您在服務器上調用Meteor方法時,您將提供一個接收錯誤和結果的回調函數。 如果希望向用戶顯示錯誤,則該方法中引發的任何Meteor.Error
異常對象都將位於error
回調參數中。
這是一個例子。 首先讓我們看一下拋出異常的流星方法。
Meteor.methods({
deletedFamily: function(family) {
//... your logic here...
if (somethingWentWrong) {
throw new Meteor.Error("logged-out", "The user must be logged in to delete a family.");
} else {
return // something
}
},
});
在客戶端上,您將這樣調用方法,如果引發了錯誤,它將在error
對象中。
// on the client
Meteor.call("deletedFamily", function (error, result) {
// identify the error
if (error && error.error === "logged-out") {
// show a nice error message
Session.set("errorMessage", "Please log in to delete a family.");
}
//...continue on with your logic...
});
如果您需要傳遞其他事物(例如mongodb)生成的異常,則只需使用try/catch
塊並在需要時傳遞Meteor.Error
。 這是一個例子。
Meteor.methods({
deletedFamily: function(family) {
//... your logic here...
try {
// Mongodb insert or update
} catch(e) {
if (e instanceof WriteError && e.code === '11000') {
throw new Meteor.Error("duplicate-error", "The family already exists.");
}
}
},
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.