我不确定如何在包含多条消息的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();
}
答案 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