module.exports.register = function(req,res,next){
body('fname').isLength({ min: 3, max:20 }).withMessage('First name must have minimum 3 chars and maximum 20 chars.')
.isAlpha().withMessage('First name has non-alphabetic characters.');
body('email').trim().isEmail().withMessage('Not in the email format');
sanitizeBody('fname').trim().escape();
sanitizeBody('email').trim().escape();
const errors = validationResult(req);
if(!errors.isEmpty()){
sendResponse(res,{status: 422 ,body:errors});
}
else{
next();
}
}
这段代码执行通过,但express-validator似乎没有执行其功能。
相反,下面的代码可以正常工作。但我认为在这两种情况下它都应该有效。
module.exports.register = [
body('fname').isLength({ min: 3, max:20 }).withMessage('First name must have minimum 3 chars and maximum 20 chars.')
.isAlpha().withMessage('First name has non-alphabetic characters.'),
body('email').trim().isEmail().withMessage('Not in the email format'),
sanitizeBody('fname').trim().escape(),
sanitizeBody('email').trim().escape(),
(req, res, next) => {
const errors = validationResult(req);
if(!errors.isEmpty()){
sendResponse(res,{status: 422 ,body:errors});
}
else{
next();
}
}
]
我在文档中找不到与我的查询相关的任何内容。 有什么帮助吗?提前致谢。
最佳答案
express-validation
“语句”本质上是快速中间件函数。这意味着它们每个返回一个带有签名function(req, res, next)
的函数。这些函数旨在由 Express API 调用。
第一个示例中发生的情况是,每个语句仅返回一个实际上并未被调用的函数。您的第一个示例相当于:
module.exports.register = function(req,res,next){
function(req,res,next) {...}
function(req,res,next) {...}
function(req,res,next) {...}
function(req,res,next) {...}
const errors = validationResult(req);
if(!errors.isEmpty()){
sendResponse(res,{status: 422 ,body:errors});
}
else{
next();
}
}
理论上,您可以重新格式化您的第一个示例并使其工作,但您可能会陷入回调 hell ,我不建议这样做。这些行中的一些内容:
module.exports.register = function(req,res,next){
(body('fname').isLength({ min: 3, max:20 }).withMessage('First name must have minimum 3 chars and maximum 20 chars.').isAlpha().withMessage('First name has non-alphabetic characters.')) (req, res,
(body('email').trim().isEmail().withMessage('Not in the email format')) (req, res,
(sanitizeBody('fname').trim().escape()) (req, res,
(sanitizeBody('email').trim().escape()) (req, res, function(req, res, next) {
const errors = validationResult(req);
if(!errors.isEmpty()){
sendResponse(res,{status: 422 ,body:errors});
}
else{
next();
}
})))));
}
不要使用这段代码,它只是一个例子,说明事情会变得多么丑陋。使用第二个示例中的数组。
关于javascript - 将快速验证函数作为单独的语句调用而不是使用逗号分隔的调用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52972651/