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

我从服务器端方法抛出一个Meteor.Error异常.

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

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

error: Forever detected script exited with code: 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模块,则应使用Meteor.bindEnvironment进行回调.或Meteor.wrapAsync以确保回调在同一光纤中运行.

一旦你这样做,你的应用程序不应该崩溃,不会导致forevever重新启动它.

相关文章
相关标签/搜索