Reputation: 495
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
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
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
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
Reputation: 11
just update the express validator , will do the tri
npm install [email protected] --save-exact
Upvotes: 1
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
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
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
Reputation: 95
app.use(expressValidator());
Replace this line with
app.use(expressValidator);
Upvotes: -5