Mike
Mike

Reputation: 495

Express Validator Error: expressValidator is not a function

I'm trying to install and use express-validator package. I've installed the package version (6.0.0) and then in my server.js file the code is:

const bodyParser = require('body-parser')
const expressValidator = require('express-validator')
const express = require('express')
const nunjucks = require('nunjucks')
const sessionInMemory = require('express-session')
const cookieParser = require('cookie-parser')

Then a few lines down I've put in the following:

const app = express()
const documentationApp = express()
app.use(expressValidator())

When the server reloads the changes (using nodemon) the app crashes and says:

TypeError: expressValidator is not a function

There are other bits of code in my server.js file but I've stripped out most of it that isn't relevant I think.

Console log for expressValidator:

{ oneOf: [Function: oneOf],
  buildSanitizeFunction: [Function: buildSanitizeFunction],
  sanitize: [Function],
  sanitizeBody: [Function],
  sanitizeCookie: [Function],
  sanitizeParam: [Function],
  sanitizeQuery: [Function],
  buildCheckFunction: [Function: buildCheckFunction],
  check: [Function],
  body: [Function],
  cookie: [Function],
  header: [Function],
  param: [Function],
  query: [Function],
  checkSchema: [Function: checkSchema],
  matchedData: [Function: matchedData],
  validationResult: { [Function] withDefaults: [Function: withDefaults] },
  Result: [Function: Result] }

Code for routes.js file:

router.get('/email-adress', function (req, res) {
  res.render('email-adress', { success: req.session.success, errors: req.session.errors })
  req.session.errors = null
})

router.post('/finished', function (req, res) {
  let email = req.body.email

  req.checkBody('email', 'Email required').isEmail()

  var errors = req.validationErrors()
  if (errors) {
    req.session.errors = errors
    req.session.success = false
    res.redirect('/email-adress')
  } else {
    req.session.success = true
    res.redirect('/finished')
  }
})

Upvotes: 15

Views: 36952

Answers (8)

MD SHAYON
MD SHAYON

Reputation: 8063

Express Validator has been updated therefore, you can't use it this way This is a new way to use the express validator

Weather stick with the previous version or use the current syntex of it.

npm uninstall express-validator
npm install [email protected]

Upvotes: 29

vamshi mannem
vamshi mannem

Reputation: 125

Yeah! Even I had the same problem. You can change the version by writing the command in root folder.

Command:

npm install [email protected] --save-exact

Upvotes: 7

Joshua Brooks
Joshua Brooks

Reputation: 1

This happened to me because I was following an outdated (2019) tutorial. It works if you install an older version (5.3.1 worked for me). I ran into this working along with the book "Get Programming with Node.js" by Jonathan Wexler.

Upvotes: 0

kinginthenorth_codez
kinginthenorth_codez

Reputation: 11

just update the express validator , will do the tri

npm install [email protected] --save-exact

Upvotes: 1

Jude Okagu
Jude Okagu

Reputation: 307

Go to package.json change "express-validator": "^6.6.0" to "express-validator": "^5.3.0", manually then run npm i

Upvotes: 2

arpitansu
arpitansu

Reputation: 607

//just pass the checking as middleware not in the callback
//see here I've just passed an array for checking as middleware
// as the middleware is an array therefore you can add multiple checks in the array
router.post("/", [check('email', "your custom error message").isEmail()], (req, res) => {

  const errors = validationResult(req);
  if (!errors.isEmpty()) {
   res.render('errorPage', { errors: errors.array() });
   //if api caller return res.status(422).json({ errors: errors.array() });
  }
  else{
    //here everything is ok to proceed
   res.render('successPage', { data });
   //to api caller  res.json({msg : "ok"})
  }

})

Upvotes: 4

mrityunjoynath
mrityunjoynath

Reputation: 95

const { check, validationResult } = require('express-validator');
router.post('/finished', function (req, res) {
let email = req.body.email

check('email', 'Email required').isEmail()

var errors = validationResult(req)
if (errors) {
  req.session.errors = errors
  req.session.success = false
  res.redirect('/email-adress')
  } else {
  req.session.success = true
  res.redirect('/finished')
  }
})

Do this. And remove

app.use(expressValidator()) 

line.

Upvotes: 3

mrityunjoynath
mrityunjoynath

Reputation: 95

app.use(expressValidator());

Replace this line with

app.use(expressValidator);

Upvotes: -5

Related Questions