如何使用一个新的Error()显示多个javascript错误?

时间:2014-02-22 21:09:47

标签: javascript node.js validation error-handling middleware

我不确定如何在包含多条消息的javascript中创建错误。

这就是我目前正在做的事情,它只会报告第一个最多的错误,如果你有多个错误,它会一次一个地下去,不是非常用户友好。

middleware.validate = function(req, res, next) {
    if (!req.form.name) return next(new Error("missing form input form name"));
    if (!req.form.shop) return next(new Error("missing form input shop"));
    if (!req.form.active) return next(new Error("missing form input active"));
    if (!req.action) return next(new Error("missing form input action"));
    return next();
}

这里有一些替代品可以返回多个消息:

middleware.validate = function(req, res, next) {
    var errors = [];
    if (!req.form.name) errors.push(new Error("missing form input form name"));
    if (!req.form.shop) errors.push(new Error("missing form input shop"));
    if (!req.form.active) errors.push(new Error("missing form input active"));
    if (!req.action) errors.push(new Error("missing form input action"));
    if(errors.length > 0){
        var err = new Error("validation failed");
        err.multiple = errors;
        return next(err);
    };
    return next();
}

middleware.validate = function(req, res, next) {
    var errors = [];
    if (!req.form.name) errors.push("missing form input form name");
    if (!req.form.shop) errors.push("missing form input shop");
    if (!req.form.active) errors.push("missing form input active");
    if (!req.action) errors.push("missing form input action");
    if(errors.length > 0) return next(new Error(errors.join("/"));
    return next();
}

这样做的任何标准/最佳实践方式?

我讨厌联接的数组错误,以及向err对象添加项目。 = [

这可能是最好的答案:

middleware.validate = function(req, res, next) {
    var errors = [];
    if (!req.form.name) errors.push("missing form input form name");
    if (!req.form.shop) errors.push("missing form input shop");
    if (!req.form.active) errors.push("missing form input active");
    if (!req.action) errors.push("missing form input action");
    if(errors.length > 0){
        var err = new Error("validation failed");
        err.messages = errors;
        return next(err);
    };
    return next();
}

1 个答案:

答案 0 :(得分:0)

我创建了一个npm模块来解决这个问题error-suite

import MultiError from 'error-suite'

let multierror = new MultiError('Invalid Form.')
multierror.push('Invalid Name')
multierror.push('Invalid Email')
multierror.push('Invalid Phone Number')

console.log(multierror.errors) // [ [Error: Invalid Name], [Error: Invalid Email], [Error: Invalid Phone Number] ]
console.log(multierror.messages) // [ 'Invalid Name', 'Invalid Email', 'Invalid Phone Number' ]
console.log(multierror.errorsPresent) // true
console.log(multierror.shouldThrow) // true
if (multierror.shouldThrow) throw multierror // Error: Invalid Form. | Invalid Name, Invalid Email, Invalid Phone Number

https://github.com/reggi/error-suite/blob/master/src/multi-error.js