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

从服务器方法抛出Meteor.Error会导致脚本退出,meteor,Meteor,我正在从服务器端方法抛出Meteor.Error异常 throw new Meteor.Error( 500, 'There was an error processing your request' ); 我的目标是让客户端Meteor.call接收此错误,它确实会接收此错误,但抛出也会导致节点进程退出 错误:检测到脚本已退出,代码:8 从Meteor.methods()向Meteor.call发送错误信号而不终止脚本的正确方法是什么?如果您以某种方式将方法从方法的光纤之外抛出,则可能会发生

我正在从服务器端方法抛出Meteor.Error异常

throw new Meteor.Error( 500, 'There was an error processing your request' );
我的目标是让客户端Meteor.call接收此错误,它确实会接收此错误,但抛出也会导致节点进程退出

错误:检测到脚本已退出,代码:8


从Meteor.methods()向Meteor.call发送错误信号而不终止脚本的正确方法是什么?

如果您以某种方式将方法从方法的光纤之外抛出,则可能会发生这种情况。比如说

Meteor.methods({
    test: function() {
        setTimeout(function() {
            throw new Meteor.Error( 500, 'There was an error processing your request' );
        }, 0);
    }
});
如果你使用的是能逃逸光纤的东西,那么在其中运行的方法可能会导致Meteor退出

您只需确保错误在光纤内部的位置。(例如,在上述示例中,您可以使用
Meteor.setTimeout
而不是
setTimeout

如果您使用的是
npm
模块,则应将用于回调。或用于确保回调在同一光纤中运行

一旦您这样做,您的应用程序就不会崩溃,也不会导致Forever重新启动它。

尝试以下方法:

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

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


Meteor.bindEnvironment工作得很好。我希望它在文档中,但只是模糊地提到。谢谢!不确定它是否相关,但零秒超时可能会导致问题。这不是节点进程退出的原因