从服务器方法抛出Meteor.Error会导致脚本退出
我正在从服务器端方法抛出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发送错误信号而不终止脚本的正确方法是什么?如果您以某种方式将方法从方法的光纤之外抛出,则可能会发生
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工作得很好。我希望它在文档中,但只是模糊地提到。谢谢!不确定它是否相关,但零秒超时可能会导致问题。这不是节点进程退出的原因