Performance: Admin vs user route protection
This affects server response time and user experience by controlling access efficiently and avoiding unnecessary processing.
Jump into concepts and practice - no test required
function adminOnly(req, res, next) {
if (!req.user || req.user.role !== 'admin') {
return res.status(403).send('Forbidden');
}
next();
}
app.use('/admin', adminOnly);
app.get('/admin/dashboard', (req, res) => {
// heavy data processing
res.send('Admin Dashboard');
});app.get('/admin/dashboard', (req, res) => { // heavy data processing if (!req.user || req.user.role !== 'admin') { return res.status(403).send('Forbidden'); } else { res.send('Admin Dashboard'); } });
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Authorization in route handler after processing | N/A (server-side) | N/A | N/A | [X] Bad |
| Authorization middleware before route handler | N/A (server-side) | N/A | N/A | [OK] Good |
function adminMiddleware(req, res, next) {
if (req.user.role === 'admin') next();
else res.status(403).send('Access denied');
}
app.get('/admin', adminMiddleware, (req, res) => {
res.send('Welcome Admin');
});function adminMiddleware(req, res, next) {
if (req.user.role === 'admin') next();
else res.send('Access denied');
}
app.get('/admin', adminMiddleware, (req, res) => {
res.send('Admin area');
});function authMiddleware(req, res, next) {
if (req.user) next();
else res.status(401).send('Login required');
}
function adminMiddleware(req, res, next) {
if (req.user?.role === 'admin') next();
else res.status(403).send('Admin only');
}
// Which setup is correct?