Routing trong NestJS dựa trên decorator: bạn ánh xạ các đường dẫn URL và HTTP method tới các method controller bằng decorator. Tiền tố route đến từ @Controller() và đường dẫn cụ thể + HTTP verb từ các method decorator như @Get() — kết hợp lại để tạo thành route đầy đủ.
Cách các route được tạo thành
@Controller("users") // TIỀN TỐ: tất cả route bắt đầu bằng /users
export class UsersController {
@Get() // GET /users
findAll() {}
@Get("active") // GET /users/active
findActive() {}
@Get(":id") // GET /users/:id (tham số động)
findOne(@Param("id") id: string) {}
@Post() // POST /users
create(@Body() dto: CreateUserDto) {}
@Put(":id") // PUT /users/:id
update(@Param("id") id: string, @Body() dto: UpdateUserDto) {}
@Delete(":id") // DELETE /users/:id
remove(@Param("id") id: string) {}
}
Tiền tố controller + đường dẫn của method decorator kết hợp: @Get(":id") bên trong @Controller("users") → GET /users/:id. Mỗi HTTP verb có decorator riêng (@Get, @Post, @Put, @Patch, @Delete).
Route parameter và query string
@Get(":id")
example(
@Param("id") id: string, // path param: /users/123 → id = "123"
@Query("sort") sort: string, // query: /users?sort=name → sort = "name"
@Query() allQuery: any, // toàn bộ object query
) {}
Route lồng nhau/wildcard và sub-path
@Controller("users")
export class UsersController {
@Get(":id/posts") // GET /users/:id/posts (resource lồng nhau)
getUserPosts(@Param("id") id: string) {}
@Get("search/*") // khớp wildcard
search() {}
}
Thứ tự route quan trọng
@Get("active") // ✅ route cụ thể TRƯỚC
findActive() {}
@Get(":id") // route động SAU — nếu không "active" sẽ khớp :id
findOne() {}
Các route cụ thể (tĩnh) nên được khai báo trước các route động (:param), nếu không route động có thể bắt mất chúng.
Tiền tố toàn cục và versioning
app.setGlobalPrefix("api/v1"); // tất cả route trở thành /api/v1/...
// NestJS cũng hỗ trợ versioning API (dựa trên URI, header, media-type)
Một tiền tố toàn cục (vd. /api/v1) áp dụng cho tất cả route — phổ biến cho các quy ước API.
Tại sao điều này quan trọng
Routing là nền tảng — nó định nghĩa cấu trúc URL của API và là cách mỗi request đến được đúng handler.
Hiểu routing dựa trên decorator của NestJS (tiền tố @Controller kết hợp với các method decorator @Get/@Post/v.v. để tạo thành route đầy đủ, và @Param/@Query để trích xuất dữ liệu) là kiến thức thiết yếu hằng ngày — đó là cách bạn xây dựng mọi endpoint, và phong cách khai báo giữ cho routing sạch sẽ và dễ đọc so với đăng ký route thủ công.
Biết các chi tiết thực tế — ghép tiền tố và đường dẫn, xử lý route parameter và query string, route resource lồng nhau, tầm quan trọng của thứ tự route (tĩnh trước động), và tiền tố toàn cục/versioning cho các quy ước API — là cần thiết để xây dựng các REST API có cấu trúc tốt trong NestJS.
Routing, controller, và các parameter decorator cùng nhau tạo nên nền tảng xử lý request của framework, khiến đây trở thành tài liệu cốt lõi, phải biết với bất kỳ lập trình viên NestJS nào.
