最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Error handle in Meteor in calling server side method - Stack Overflow

programmeradmin1浏览0评论

I call a method for deleting family from server/publicationMehods like this:

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

      }
}

I want to handle exception and catch it if any errors happend and in frond-end show the result. I know there is not any transaction in Meteor. But I need to show the result to user at least.

I call a method for deleting family from server/publicationMehods like this:

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

      }
}

I want to handle exception and catch it if any errors happend and in frond-end show the result. I know there is not any transaction in Meteor. But I need to show the result to user at least.

Share Improve this question asked Mar 28, 2017 at 3:43 MehrnooshMehrnoosh 8992 gold badges12 silver badges27 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 4

In Meteor, if you want to return an error to a user from a Meteor method then you throw an exception, but it must be a Meteor.Error exception object in order to send it back to the client.

On the client side, when you call a Meteor method on the server, you provide a callback function that receives an error and result. If you wish to display an error to the user then whatever Meteor.Error exception object that was thrown in the method will be in the error callback argument.

Here is an example. First let's look at the meteor method throwing an exception.

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

On the client, you would call the method like this and if an error was thrown it will be in the error object.

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

If you need to pass along an exception generated by something else (mongodb for example), then just use try/catch blocks and pass a Meteor.Error when needed. Here is an example.

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

You can use throw/catch.

Read the following document:

Throw

发布评论

评论列表(0)

  1. 暂无评论