Express Router
// routes/users.js\nconst express = require('express');\nconst router = express.Router();\n\nrouter.get('/', (req, res) => {\n res.json(User.getAll());\n});\n\nrouter.post('/', (req, res) => {\n const user = User.create(req.body);\n res.status(201).json(user);\n});\n\nrouter.get('/:id', (req, res) => {\n const user = User.findById(req.params.id);\n if (!user) return res.status(404).json({ error: 'Not found' });\n res.json(user);\n});\n\nmodule.exports = router;\n\n// app.js\nconst userRoutes = require('./routes/users');\napp.use('/api/users', userRoutes);
Chained Routes
app.route('/api/items')\n .get((req, res) => { /* list */ })\n .post((req, res) => { /* create */ });\n\napp.route('/api/items/:id')\n .get((req, res) => { /* get */ })\n .put((req, res) => { /* update */ })\n .delete((req, res) => { /* delete */ });
Validation
// Manual validation\napp.post('/api/users', (req, res) => {\n const { name, email, age } = req.body;\n \n const errors = [];\n if (!name || name.length < 2) errors.push('Name is required (min 2 chars)');\n if (!email || !email.includes('@')) errors.push('Valid email is required');\n if (age && (age < 0 || age > 150)) errors.push('Invalid age');\n \n if (errors.length) {\n return res.status(422).json({ errors });\n }\n \n res.status(201).json({ message: 'User created' });\n});
Examples
const express = require('express');
const router = express.Router();
// In-memory store
let items = [];
let nextId = 1;
router.get('/', (req, res) => {
const { limit = 10, offset = 0 } = req.query;
res.json({
data: items.slice(Number(offset), Number(offset) + Number(limit)),
total: items.length,
});
});
router.get('/:id', (req, res) => {
const item = items.find(i => i.id === Number(req.params.id));
if (!item) return res.status(404).json({ error: 'Not found' });
res.json(item);
});
router.post('/', (req, res) => {
const { name, price } = req.body;
const item = { id: nextId++, name, price, created: new Date() };
items.push(item);
res.status(201).json(item);
});
router.put('/:id', (req, res) => {
const idx = items.findIndex(i => i.id === Number(req.params.id));
if (idx === -1) return res.status(404).json({ error: 'Not found' });
items[idx] = { ...items[idx], ...req.body };
res.json(items[idx]);
});
router.delete('/:id', (req, res) => {
items = items.filter(i => i.id !== Number(req.params.id));
res.status(204).end();
});
module.exports = router;