Bỏ qua để đến nội dung
Knowledge Hub

NestJS Cơ bản

NestJS có nhiều decorator, nên rất dễ viết đúng cú pháp mà vẫn hiểu sai thời điểm mọi thứ xảy ra. Hai câu hỏi hay bị trộn: ứng dụng được lắp ghép lúc nào, và một request đi qua những gì. Tách hai câu này ra là cách nhanh nhất để đọc lỗi của Nest.

Thời điểm Chuyện xảy ra Đọc
Bootstrap Nest đọc metadata module, dựng graph, tạo provider. Module chỉ là khai báo, không chạy lại theo request Module, provider, controller, DI container
Có request Request đi qua middleware, guard, interceptor, pipe tới handler, rồi quay ra qua interceptor; lỗi rẽ sang filter Request lifecycle

Lỗi khó chịu nhất nằm ở giao điểm: đặt state của một request vào field của provider mặc định (dùng chung cho mọi request), hoặc gắn request scope lên provider trung tâm khiến cả cây bị tạo lại mỗi request (provider scopes).

Thứ tự Bài Mức Trả lời
1 Module, provider và controller Cơ bản Ba vai trò, import/export, đọc lỗi “can’t resolve dependencies”
2 DI container Trung cấp Token, useClass vs useExisting, @Optional, async provider, dynamic module
3 Provider scopes Trung cấp Bao nhiêu instance, vì sao request scope lan lên, REQUEST hay ALS
4 Request lifecycle Trung cấp Thứ tự các lớp, ba đường đi, filter bắt lỗi nào
5 Custom decorator & Reflector Trung cấp @Public(), @Roles(), override hay merge metadata
6 Dynamic module Trung cấp forRoot/forRootAsync, vì sao import hai lần thành hai instance
7 Validation DTO Cơ bản whitelist, nested DTO, query param, mass assignment
8 Exception filter & error response Trung cấp Một format lỗi, map 23505 thành 409, lỗi không tới filter
9 Transaction xuyên service (CLS) Nâng cao Giữ một connection qua nhiều service, propagation, bẫy quên await
Tình huống Đọc
Mới bắt đầu với NestJS Bài 1, rồi bài 4
UnknownDependenciesException lúc khởi động Module, provider và controller, phần import/export
Cần hai token trỏ về cùng một instance DI container, phần useExisting
Không rõ đặt logic ở guard, interceptor hay pipe Request lifecycle
Hai request ghi đè currentTenant của nhau Provider scopes, rồi AsyncLocalStorage
@Public() trên controller không có tác dụng Custom decorator & Reflector
Client gửi role: "admin" mà vẫn lọt Validation DTO
Mỗi lỗi một format, lỗi DB thành 500 Exception filter & error response
Lỗi giữa chừng để lại dữ liệu nửa vời giữa các service Transaction xuyên service (CLS)
Nghi handler làm chậm request khác Chưa có bài NestJS riêng; xem Event loop Node.js

Nhóm này hiện có chín bài trên. Chưa có bài về testing, microservices hay GraphQL trong NestJS.