Custom Middleware
While built-in middleware covers common needs, real applications often require custom logic. Express makes it easy to create your own middleware functions. Additionally, there's a rich ecosystem of third-party middleware you can install via npm.
Custom Middleware
Creating custom middleware is simple – it's just a function that takes `req`, `res`, and `next`. Here are some practical examples:
1. Logger Middleware
<!-- Custom logger middleware -->const logger = (req, res, next) => { console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`); next();};
app.use(logger);2. Authentication Check Middleware
const requireAuth = (req, res, next) => { const token = req.headers.authorization; if (!token) { return res.status(401).json({ error: 'No token provided' }); } <!-- Verify token (simplified) --> if (token !== 'secret-token') { return res.status(403).json({ error: 'Invalid token' }); } <!-- Add user info to request --> req.user = { id: 1, name: 'John' }; next();};
<!-- Protect specific routes -->app.get('/profile', requireAuth, (req, res) => { res.json({ user: req.user });});3. Request Timer Middleware
const requestTimer = (req, res, next) => { req.startTime = Date.now(); <!-- Override res.end to log duration --> const originalEnd = res.end; res.end = function(...) { const duration = Date.now() - req.startTime; console.log(`Request took ${duration}ms`); originalEnd.apply(res, arguments); }; next();};
app.use(requestTimer);Third-party Middleware
The npm ecosystem has many useful middleware packages. Here are two essential ones:
1. body-parser
(Note: body-parser is now built into Express, but some legacy apps still use it)
npm install body-parser
const bodyParser = require('body-parser');app.use(bodyParser.json());app.use(bodyParser.urlencoded({ extended: true }));2. cors
CORS (Cross-Origin Resource Sharing) allows your API to be accessed from different domains.
npm install cors
const cors = require('cors');
<!-- Enable all CORS requests -->app.use(cors());
<!-- Or configure specific options -->app.use(cors({ origin: 'https://myapp.com', optionsSuccessStatus: 200}));Two Minute Drill
- Custom middleware are just functions with `(req, res, next)` signature.
- Use custom middleware for logging, authentication, validation, etc.
- Third-party middleware like `cors` extends Express functionality.
- `body-parser` is now built into Express (use `express.json()` instead).
- Middleware can modify `req` and `res` objects to pass data to subsequent handlers.
Need more clarification?
Drop us an email at career@quipoinfotech.com
