Example 1: express validator
const { validationResult, check } = require('express-validator')
exports.resultsValidator = (req) => {
const messages = []
if (!validationResult(req).isEmpty()) {
const errors = validationResult(req).array()
for (const i of errors) {
messages.push(i)
}
}
return messages
}
exports.registerValidator = () => {
return [
check('username')
.notEmpty()
.withMessage('username is required')
.not()
.custom((val) => /[^A-za-z0-9\s]/g.test(val))
.withMessage('Username not use uniq characters'),
check('password')
.notEmpty()
.withMessage('password is required')
.isLength({ min: 8 })
.withMessage('password must be 8 characters')
]
}
exports.loginValidator = () => {
return [
check('username').notEmpty().withMessage('username or email is required'),
check('password').notEmpty().withMessage('password is required')
]
}
const errors = resultsValidator(req)
if (errors.length > 0) {
return res.status(400).json({
method: req.method,
status: res.statusCode,
error: errors
})
}
route.post('/login', loginValidator(), (req, res) => {
return res.status(200).send('Login Sucessfuly');
});
route.post('/register', registerValidator(), (req, res) => {
return res.status(200).send('Register Sucessfuly');
});
Example 2: express validator
npm install --save express-validator
Example 3: express-validator
const { body, validationResult } = require('express-validator');
app.post('/user', [
body('username').isEmail(),
body('password').isLength({ min: 5 })
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
User.create({
username: req.body.username,
password: req.body.password
}).then(user => res.json(user));
});
Example 4: express validator
import { Request } from 'express'
import { check, validationResult, ValidationError, ValidationChain, Result, Meta } from 'express-validator'
export const expressValidator = (req: Request): ValidationError[] => {
const errors: Result<ValidationError> = validationResult(req)
const messages: ValidationError[] = []
if (!errors.isEmpty()) {
for (const i of errors.array()) {
messages.push(i)
}
}
return messages
}
export const registerValidator = (): ValidationChain[] => [
check('firstName').notEmpty().withMessage('firstName is required'),
check('firstName')
.not()
.custom((val: string) => /[^a-zA-Z]/gi.test(val))
.withMessage('firstName cannot include unique character'),
check('lastName').notEmpty().withMessage('lastName is required'),
check('lastName')
.not()
.custom((val: string) => /[^a-zA-Z]/gi.test(val))
.withMessage('lastName cannot include unique character'),
check('email').notEmpty().withMessage('email is required'),
check('email').isEmail().withMessage('email is not valid'),
check('password').notEmpty().withMessage('password is required'),
check('password').isLength({ min: 8 }).withMessage('password must be at least 8 characters'),
check('location').notEmpty().withMessage('location is required'),
check('location')
.not()
.custom((val: string) => /[^a-zA-Z]/gi.test(val))
.withMessage('location cannot include unique character'),
check('phone').notEmpty().withMessage('phone is required'),
check('phone').isLength({ min: 10 }).withMessage('phone number must be at least 10 characters'),
check('phone').isLength({ max: 12 }).withMessage('phone number must be at least 12 characters'),
check('phone').isMobilePhone('id-ID').withMessage('phone number is not valid')
]
export const loginValidator = (): ValidationChain[] => [
check('email').notEmpty().withMessage('email is required'),
check('email').isEmail().withMessage('email is not valid'),
check('password').notEmpty().withMessage('pasword is required')
]
export const emailValidator = (): ValidationChain[] => [
check('email').notEmpty().withMessage('email is required'),
check('email').isEmail().withMessage('email is not valid')
]
export const tokenValidator = (): ValidationChain[] => [
check('token').notEmpty().withMessage('token is required'),
check('token').isBase64().withMessage('token is not valid')
]
export const passwordValidator = (): ValidationChain[] => [
check('password').notEmpty().withMessage('password is required'),
check('password').isLength({ min: 8 }).withMessage('password must be at least 8 characters'),
check('password')
.not()
.custom((value: string, { req }: Meta) => req.body.cpassword !== value)
.withMessage('confirm password is not match with password'),
check('cpassword').notEmpty().withMessage('cpassword is required'),
check('cpassword').isLength({ min: 8 }).withMessage('cpassword must be at least 8 characters')
]