【问题标题】:How to throw an error message to the client when check() throws an Match.Error?当 check() 抛出 Match.Error 时如何向客户端抛出错误消息?
【发布时间】:2015-01-18 05:40:42
【问题描述】:

我正在发布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 时,如何向客户端抛出错误消息?

【问题讨论】:

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


    【解决方案1】:

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

    我已按照以下in a Meteorpad 完成您的订阅,并按预期发送给客户进行处理。

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

    【讨论】:

    • 此外,检查块不必在 try catch 中,因为它总是会抛出一个 Match.Error 并将传播到 onError 回调。
    • user7282791 这对我有用,谢谢! @Serkan,如果我没有执行 try catch 块,我将无法指定错误消息。
    • 您提供了一个非常通用的 invalid-opts 错误消息,因此我认为您应该在错误回调中处理返回到客户端的 Match 错误,而不是使用 try catch 块.如果您想告诉用户究竟是哪个字段有问题,那么您可以对每个选项进行单独检查并将其包装在 try/catch 中。
    猜你喜欢
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    相关资源
    最近更新 更多