Search code examples
node.jsvalidationexpressexpress-validator

Not getting any response - Express Validator


I'm using the latest version of express-validator for validation. I'm not getting any response, However Old method i.e checkBody is working fine while new method i.e check('keyName') is not working properly.

Below is my code.

package.json

"express-validator": "^5.0.3",

routes.js

var authValidator = require('./../validation/auth.validation');
var routes = require('express').Router();

routes.post('/login', [
  authValidator.validateLogin, 
  authValidator.checkValidationResult ], function (req, res) {
     console.log('3');
     //res.send("Some other stuffs");
  }
);

module.exports = routes;

auth.validation.js

module.exports.validateLogin = validateLogin;
module.exports.checkValidationResult = checkValidationResult;

const {check, validationResult} = require('express-validator/check');
const {matchedData, sanitize} = require('express-validator/filter');

var response = require('./../general/MyResponse');
var messages = require('./../general/messages');

function validateLogin(req, res, next) {
  console.log('1');
  return [
    check('email').isLength({min: 1}).withMessage(messages.EMAIL_REQUIRED)
    .isEmail().withMessage(messages.INVALID_EMAIL),
    check('password').isLength({min: 1}).withMessage(messages.PASSWORD_REQUIRED),
  ]
}

function checkValidationResult(req, res, next) {
  console.log('2');
  var result = validationResult(req)
  if (!result.isEmpty()) {
    response.createResponse(
      res, 400,
      result.array()[0].msg,
      {'error': result.array()[0].msg}, {}
    )
  } else {
    next()
  }
}

I've noticed that node js not able to go ahead from the function validateLogin in auth.validation.js.

Can anyone tell me what's wrong with above code.

Inside console, Only 1 is displaying.

I'm attaching screenShot for referance.

screenShot of error


Solution

  • We need to use simple Array and don't need to create function.

    Follow this link Is it possible to do the validation in a separate file and not inline in the route? - GitHub for more details.

    Code should be like this.

    auth.validation.js

    var response = require('./../general/MyResponse');
    var messages = require('./../general/messages');
    
    const {check, validationResult} = require('express-validator/check');
    const {matchedData, sanitize} = require('express-validator/filter');
    
    module.exports.validateLogin = [
        check('email').isLength({min: 1}).withMessage(messages.EMAIL_REQUIRED).isEmail().withMessage(messages.INVALID_EMAIL),
        check('password').isLength({ min: 1 }).withMessage(messages.PASSWORD_REQUIRED),
    ];
    
    module.exports.checkValidationResult = checkValidationResult;
    
    function checkValidationResult(req, res, next) {
        console.log('2');
        var result = validationResult(req)
        if (!result.isEmpty()) {
            response.createResponse(res, 400,
                result.array()[0].msg,
                {'error': result.array()[0].msg}, {}
            )
        } else {
            next()
        }
    }
    

    `