'TypeError: req.checkBody is not a function

I'm trying to implement some validation in a sign up system, but I get the error:

     TypeError: req.checkBody is not a function

from the following code:

module.exports = function(app, express) {
  var express = require('express');
  var api = express.Router();

  // post users to database
  api.post('/signup', function(req, res) {
    var email = req.body.email;
    var password = req.body.password;
    var password2 = req.body.password2;
    var key = req.body.key;

    // Validation
    req.checkBody('email', 'Email is required.').notEmpty();
    req.checkBody('email', 'Email is not valid').isEmail(); 
    req.checkBody('password', 'Password is required').notEmpty();
    req.checkBody('password2', 'Passwords do not match').equals(req.body.password);

    var errors = req.validationErrors();

    if(errors) {
      res.render('register', {
        errors: errors
      });
    } else {
      var user = new User({
        email: email,
        password: password
      });
      var token = createToken(user);
    }

    // save to database
    user.save(function(err) {
      if (err) {
        res.send(err);
        return;
      }

      res.json({
        success: true,
        message: 'User has been created',
        token: token
      });
    });

  });

I've checked and it's getting the info from the front end, and I've had almost the same code work in another app (where is wasn't wrapped in module.exports = function(app, express) { }



Solution 1:[1]

I encountered the same problem, I found out that the problem was from the current version of express_validator. I had to degrade to "express-validator": "5.3.1", and it worked for me. I think the need to fix the issue.

Solution 2:[2]

With express-validator 6 you will have to do the following:

import

var router = express.Router();
var { body, validationResult} = require('express-validator');

validation

body('username').isEmail()
body('password').isLength({ min: 5 })

errors

const errors = validationResult(req);

Solution 3:[3]

Same as in the above answer, after installing express-validator, adding

server.use(expressValidator()); 

under

const express=require("express"); 

and

const server=express(); 

solved my problem.

Solution 4:[4]

just change :

noEmpty()
to
isLength({min:1})

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Amadi Chukwuemeka Austin
Solution 2 Sandip Subedi
Solution 3 dilanSachi
Solution 4 Mounir bkr