Express xếp mọi app.use() và route handler vào một stack theo đúng thứ tự khai báo, rồi duyệt từ trên xuống cho mỗi request. Một middleware chỉ chạy nếu request đi tới được vị trí của nó.
Hai trường hợp làm luồng xử lý dừng lại:
- Handler phía trên kết thúc response (res.send, res.json) và không gọi next().
- Handler phía trên quên gọi next() — request treo đến khi timeout.
js
app.get('/users', (req, res) => res.json([])) // response kết thúc ở đây
app.use(logger) // không bao giờ chạy với GET /users
// đúng thứ tự
app.use(logger)
app.get('/users', (req, res) => res.json([]))Trật tự chuẩn của một app: middleware hạ tầng (helmet, cors, body parser, logger) → routes → handler 404 → error-handling middleware đặt cuối cùng.
Đặt sai chỗ là nguyên nhân phổ biến của "CORS không có tác dụng" hoặc "req.body undefined".