调用服务器端方法时 Meteor 中的错误句柄



我调用一个从服务器/出版物中删除家族的方法Mehods,如下所示:

    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);
      }
}

我想处理异常并在发生任何错误时捕获它,并在 frond-end 显示结果。我知道流星没有任何交易。但我至少需要向用户显示结果。

在 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.");
      }
    }
  },
});

你可以使用投掷/接球。

阅读以下文档:

最新更新