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

How to throw an error message to the client when check() throws an Match.Error?

我正在发布 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 包,我想用它来确保我不错过任何支票。

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

看来您只是未能通过客户端回调来检查错误。见 onError callback of Meteor.subscribe().

我已经按照下面的方式完成了您的订阅in a Meteorpad,它会按预期发送给客户进行处理。

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