Вызов функций экспресс-проверки как отдельных операторов вместо использования вызова через запятую не работает - PullRequest
0 голосов
/ 24 октября 2018
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();
    }
}

Этот фрагмент кода выполняется через, но экспресс-валидатор, похоже, не выполняет своих функций.

Вместо этого приведенный ниже код работает нормально.Но я полагаю, что в обоих случаях это должно сработать.

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

Я не могу найти ничего подходящего для моего запроса в документе.Любая помощь?Заранее спасибо.

1 Ответ

0 голосов
/ 24 октября 2018

«Заявления» express-validation по сути являются функциями промежуточного программного обеспечения.Это означает, что каждый из них возвращает функцию с подписью function(req, res, next).Эти функции предназначены для вызова экспресс-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();
    }
}

Теоретически вы можете переформатировать свой первый пример и заставить его работать, но вы, вероятно, закончите адом обратного вызова, и я бы не советовал.Что-то из этих строк:

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

Не используйте этот код, это всего лишь пример того, как могут быть неприятные вещи.Используйте массив, как во втором примере.

...