express.Router() tạo một mini-app có route và middleware riêng — đây là cách chính để tổ chức code theo feature.
ts
// routes/users.ts
const router = express.Router()
router.use(authMiddleware) // chỉ áp cho route trong router này
router.get('/', listUsers)
export default router
// app.ts
app.use('/api/v1/users', userRouter) // prefix cho toàn bộ route bên trong- Nested router:
adminRouter.use('/users', adminUserRouter)để lồng sâu hơn. - Versioned API:
app.use('/api/v1', v1Router)vàapp.use('/api/v2', v2Router)— hai version độc lập hoàn toàn nên deprecate v1 rất gọn. - Cấu trúc file thực tế:
routes/users.tsexport router,routes/index.tsgom tất cả router lại,app.tschỉ còn một dòngapp.use('/api', mainRouter).
Lưu ý: router.use(middleware) đặt sau router.get(...) thì route đó không được áp middleware — middleware phải nằm TRƯỚC những route mà nó cần bảo vệ.