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

标签 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();
}

最佳答案

我创建了一个 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

关于javascript - 如何使用一个新的 Error() 显示多个 javascript 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960609/

相关文章:

javascript - 在 Rails 中获取没有指纹的 Assets url

mysql - c9.io - 如何在 node.js 平台中找到主机地址以建立 mysql 连接

JavaScript:消除三个 JSHint 错误

node.js - Node/Express API,使用 JWT token 的电子邮件验证,意外行为

java - 如何在Java 8中检查文件是否可以成功创建

javascript - jQuery 脚本未激活

javascript - 在键盘 ENTER 上提交 ajax 请求

javascript - Q.fcall总是失败

c# - 复杂类型的方法参数验证

php - 为什么 PHP 区分缓存的 .php 和 .abc 扩展名?