我从服务器端方法抛出了Meteor.Error异常。
throw new Meteor.Error( 500, 'There was an error processing your request' );
我的目标是让客户端Meteor.call接收到这个错误,但是抛出也导致节点进程退出。
错误:永远检测到的脚本退出代码:8
在不杀死脚本的情况下,从Meteor.methods()向Meteor.call发出错误信号的正确方法是什么?
答案 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中的字符串而不是整数
答案 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);
}
}
})