我调用一个从服务器/出版物中删除家族的方法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.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.");
}
}
},
});
你可以使用投掷/接球。
阅读以下文档:
扔