当check()抛出Match.Error时,如何向客户端抛出错误消息?

时间:2015-01-18 05:40:42

标签: javascript exception error-handling exception-handling meteor

我正在发布Products集合中的一些文档,并使用check()确保传递给它的选项有效。如果客户端传入无效选项,我希望在控制台上显示自定义错误消息。

我正在使用audit-argument-checks包来确保检查所有方法并发布函数。

在客户端上,我传入了一个无效选项(reverse应该是一个布尔值),但在客户端控制台和服务器日志中都没有发现错误。

// Server
Meteor.publish('products', function (opts) {
    try {
        check(opts, {
            sort: Match.Optional(String),
            reverse: Match.Optional(Boolean),
            start: Match.Optional(Number),
            limit: Match.Optional(Number),
            userId: Match.Optional(String)
        });
    } catch (err) {
        this.error(new Meteor.Error('invalid-opts', "Please check your options are valid")); // Throws back an error saying invalid options
    }
    // Some more code
});

// Client
Template.home.helpers({
    productListings: function () {
        Meteor.subscribe('products', {sort: 'created', reverse: 'asdasd'});
        return Products.find({});
    }
});

我尝试使用Match.test()代替check(),但这不符合audit-argument-checks套餐,我想用它来确保我不会{39} ; t错过任何检查。

check()抛出Match.Error时,如何向客户端抛出错误消息?

1 个答案:

答案 0 :(得分:2)

我看起来你只是没有通过客户端上的回调来检查错误。请参阅onError callback of Meteor.subscribe()

我已按照in a Meteorpad进行了订阅,并按照预期进入客户端进行处理。

Meteor.subscribe('products',{sort: 'created', reverse: 'asdasd'},
  {onError: function( err ) {throw err;}}
);