我不确定如何在带有多条消息的 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/