Skip to main content

Express Validator for Signup Form

Import check and body from express-validator/check
const { check, body } = require('express-validator/check');
This is the route for signup POST
router.post('/signup',
[
check('email')
.isEmail().withMessage('Please enter a valid email.')
.custom((value, { req }) => {
return User.findOne({
email: value
}).then(user => {
if (user) {
return Promise.reject('This email is already registered. Try logging in!');
}
});
})
.normalizeEmail(),
body('password', '')
.isLength({min: 6}).withMessage('Password must be of at least 6 characters.')
.isAlphanumeric().withMessage('Only letters and digits are allowed in password.')
.trim(),
body('confirmPassword')
.trim()
.custom((value, { req }) => {
if (value === req.body.password) {
return true;
} else {
throw new Error('Password and Confirm Password do not match.');
}
}),
body('name', 'Please enter a valid name.')
.isLength({ min:3, max: 50 })
.isAlpha()
.trim()
],
authController.postSignup);

In authController import
const { validationResult } = require('express-validator/check');
Then store it in errors variable
const errors = validationResult(req);
errors has an array of errors which can be accessed in the following form and passed to frontend if required.
const validationErrors = errors.array();
Access first error in the following way
const validationFirstError = errors.array()[0].msg;
That is it. This is the way to get errors from validation middleware and display in frontend.

Comments

Popular posts from this blog

Difference between .exec() and .execPopulate() in Mongoose?

Here I answer what is the difference between .exec() and .execPopulate() in Mongoose? .exec() is used with a query while .execPopulate() is used with a document Syntax for .exec() is as follows: Model.query() . populate ( 'field' ) . exec () // returns promise . then ( function ( document ) { console . log ( document ); }); Syntax for .execPopulate() is as follows: fetchedDocument . populate ( 'field' ) . execPopulate () // returns promise . then ( function ( document ) { console . log ( document ); }); When working with individual document use .execPopulate(), for model query use .exec(). Both returns a promise. One can do without .exec() or .execPopulate() but then has to pass a callback in populate.

Two Ways of rendering in React Examples

Two Ways of rendering in React Examples 1 - Render twice HTML < div id = "p1" ></ div > < div id = "p2" ></ div > CSS . person { display : inline - block ; margin : 10px ; border : 1px solid # eee ; box - shadow : 0 2px 2px # ccc ; } JAVASCRIPT (Babel) function Person ( props ) { return ( < div className = ' person "> < h1 >{ props . name }</ h1 > < p > Age :{ props . age }</ p > </ div > ); } ReactDOM . render (< Person name = "VK" age = "29" />, document . querySselector ( '#p1' )); ReactDOM . render (< Person name = "HK" age = "28" />, document . querySselector ( '#p2' )); 2 Render all at once HTML < div id = "app" ></ div > CSS . person { display : inline - block ; margin : 1...

Resolve: Uncaught TypeError: firebase.database is not a function

If you are getting the error: Uncaught TypeError: firebase.database is not a function Resolve it by including firebase-database.js in your html page as follows: <!-- The core Firebase JS SDK is always required and must be listed first --> <script defer src = "https://www.gstatic.com/firebasejs/6.2.4/firebase-app.js" ></script> <script defer src = "https://www.gstatic.com/firebasejs/3.1.0/firebase-database.js" ></script> That is it. Let me know if this was helpful.