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