从服务器方法抛出Meteor.Error会导致脚本退出

时间:2014-03-09 13:21:32

标签: meteor

我从服务器端方法抛出了Meteor.Error异常。

throw new Meteor.Error( 500, 'There was an error processing your request' );

我的目标是让客户端Meteor.call接收到这个错误,但是抛出也导致节点进程退出。

  

错误:永远检测到的脚本退出代码:8

在不杀死脚本的情况下,从Meteor.methods()向Meteor.call发出错误信号的正确方法是什么?

3 个答案:

答案 0 :(得分:12)

如果您以某种方式从方法的光纤外部抛出方法,则会发生这种情况。例如

Meteor.methods({
    test: function() {
        setTimeout(function() {
            throw new Meteor.Error( 500, 'There was an error processing your request' );
        }, 0);
    }
});

如果你正在使用可以逃脱光纤的东西,那么方法运行就会导致Meteor退出。

您只需要确定将错误扔到光纤内部的位置。 (例如,在上面的示例中,您可以使用Meteor.setTimeout代替setTimeout

如果您使用的是npm模块,则应使用 Meteor.bindEnvironment 进行回调。或 Meteor.wrapAsync 以确保回调在同一光纤中运行。

一旦你这样做,你的应用程序不应该崩溃,也不会导致预先重启它。

答案 1 :(得分:2)

第一个参数应该是meteor 1.2.1中的字符串而不是整数

http://docs.meteor.com/#/full/meteor_error

答案 2 :(得分:0)

试试这个:

Meteor.methods({
  "foo":function(){
    try{
      var id = Clients.insert(client);
      if(id){
        return id;
      }
    }catch(e){
      throw new Meteor.Error(400,e.message);
    } 
  }
})