将快速验证函数作为单独的语句调用而不是使用逗号分隔的调用不起作用

Invoking express-validation functions as separate statements instead of using comma separated invocation is not working

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 "statements" 本质上是 express 中间件函数。这意味着它们中的每一个 returns 都是一个带有签名 function(req, res, next) 的函数。这些函数旨在由表达式 API.

调用

在您的第一个示例中发生的情况是,每个语句只是 returns 一个实际上未被调用的函数。你的第一个例子等同于:

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

理论上您可以重新格式化您的第一个示例并使其工作,但您可能会以回调地狱告终,我不建议这样做。这些行中的内容:

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

不要使用此代码,它只是一个例子,说明事情会变得多么丑陋。使用第二个示例中的数组。