express-validator helps check and clean user input in Express apps. It keeps your app safe and error-free.
express-validator setup
Start learning this pattern below
Jump into concepts and practice - no test required
import { body, validationResult } from 'express-validator'; app.post('/route', [ body('fieldName').validationMethod(), // more validations ], (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } // proceed if no errors });
Use body() to check data sent in the request body.
validationResult(req) collects errors after validations run.
body('email').isEmail()body('password').isLength({ min: 6 })
body('username').notEmpty()This Express app sets up a POST route '/register' that checks user input for email, password, and username. If input is invalid, it sends back error details. If all is good, it confirms registration.
import express from 'express'; import { body, validationResult } from 'express-validator'; const app = express(); app.use(express.json()); app.post('/register', [ body('email').isEmail().withMessage('Enter a valid email'), body('password').isLength({ min: 6 }).withMessage('Password must be 6+ chars'), body('username').notEmpty().withMessage('Username is required') ], (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } res.send('User registered successfully'); }); app.listen(3000, () => console.log('Server running on port 3000'));
Always call validationResult(req) inside your route handler to get validation errors.
You can chain withMessage() to customize error messages for each check.
express-validator works well with Express JSON middleware to parse request bodies.
express-validator helps check and clean user input in Express apps.
Use body() and other validators to define rules for input fields.
Check errors with validationResult(req) and respond accordingly.
Practice
express-validator in an Express app?Solution
Step 1: Understand express-validator's role
express-validator is a tool used to validate and sanitize user input in Express applications.Step 2: Compare options with express-validator's purpose
Only 'To check and clean user input data' matches this purpose. Options A, B, and C relate to other Express features.Final Answer:
To check and clean user input data -> Option DQuick Check:
express-validator = input validation [OK]
- Confusing express-validator with database tools
- Thinking it handles static files or errors automatically
body validator from express-validator?Solution
Step 1: Identify modern import syntax for express-validator
express-validator exports named functions likebody, so use named import syntax.Step 2: Choose correct ES module import
import { body } from 'express-validator'; usesimport { body } from 'express-validator';which is correct for ES modules.Final Answer:
import { body } from 'express-validator'; -> Option BQuick Check:
Named import syntax = import { body } from 'express-validator'; [OK]
- Using default import instead of named import
- Calling body() during import
- Using require without destructuring
email field is missing in the request body?
import { body, validationResult } from 'express-validator';
app.post('/signup', [
body('email').isEmail(),
body('password').isLength({ min: 6 })
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
res.send('Signup successful');
});Solution
Step 1: Understand validation rules
The route requires 'email' to be a valid email and 'password' to be at least 6 characters.Step 2: Analyze missing email field effect
Missing 'email' failsisEmail()check, sovalidationResult(req)will contain errors.Step 3: Check response on validation failure
The code returns status 400 with error details if errors exist.Final Answer:
Status 400 with error about missing or invalid email -> Option AQuick Check:
Missing email triggers validation error = Status 400 with error about missing or invalid email [OK]
- Assuming success response despite missing fields
- Confusing status codes for validation errors
- Ignoring validationResult check
import { body, validationResult } from 'express-validator';
app.post('/login', (req, res) => {
body('username').notEmpty();
body('password').isLength({ min: 8 });
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
res.send('Login successful');
});Solution
Step 1: Check how validators are applied
Validators likebody('username').notEmpty()must be middleware before the route handler, not called inside it.Step 2: Identify correct middleware usage
Validators should be passed as an array before the handler function inapp.post.Final Answer:
Validators are not used as middleware before the route handler -> Option AQuick Check:
Validators must be middleware, not called inside handler [OK]
- Calling validators inside route handler function
- Ignoring middleware order
- Assuming validationResult usage is wrong
email, password, and age. The rules are: email must be valid, password at least 8 characters, and age must be an integer between 18 and 99. Which express-validator setup correctly applies these rules and handles errors?Solution
Step 1: Check middleware usage for validators
Validators must be passed as middleware array before the route handler, as in three of the choices.Step 2: Verify error handling logic
app.post('/register', [ body('email').isEmail(), body('password').isLength({ min: 8 }), body('age').isInt({ min: 18, max: 99 }) ], (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } res.send('Registration complete'); }); correctly checks!errors.isEmpty()to detect errors and respond with status 400. app.post('/register', [ body('email').isEmail(), body('password').isLength({ min: 8 }), body('age').isInt({ min: 18, max: 99 }) ], (req, res) => { res.send('Registration complete'); }); skips error checking. app.post('/register', [ body('email').isEmail(), body('password').isLength({ min: 8 }), body('age').isInt({ min: 18, max: 99 }) ], (req, res) => { const errors = validationResult(req); if (errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } res.send('Registration complete'); }); reverses the condition incorrectly. app.post('/register', (req, res) => { body('email').isEmail(); body('password').isLength({ min: 8 }); body('age').isInt({ min: 18, max: 99 }); const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } res.send('Registration complete'); }); calls validators inside handler, which is wrong.Final Answer:
The setup with validators as middleware array and correct !errors.isEmpty() check -> Option CQuick Check:
Middleware validators + correct error check = app.post('/register', [ body('email').isEmail(), body('password').isLength({ min: 8 }), body('age').isInt({ min: 18, max: 99 }) ], (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } res.send('Registration complete'); }); [OK]
- Calling validators inside route handler
- Skipping validationResult error check
- Reversing error condition logic
