簡體   English   中英

流星在調用服務器端方法中的錯誤句柄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM