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

Lỗi hay gặp khi code backend Node.js, NestJS và PostgreSQL Trung cấp

Phần lớn bug production không đến từ thuật toán khó. Chúng đến từ vài chục lỗi lặp đi lặp lại: quên await, tiền bằng float, transaction chạy sai connection, fetch không timeout.

Cụm này gom các lỗi đó thành một danh mục. Mỗi lỗi là một cặp BAD/GOOD kèm “Vì sao”: hỏng cái gì, khi nào nổ, tại sao. Mọi hành vi đều đã chạy thử trên Node 24 và PostgreSQL 17.

Đang tải diagram…

  • Input sai kiểu đi thẳng xuống DB hoặc làm treo regex.
  • Async sai làm lỗi không về đúng try/catch, hoặc làm sập process.
  • Tài nguyên là chặng cuối nhưng ảnh hưởng ngược lại mọi request khác.
Trang Câu hỏi nó trả lời Ví dụ lỗi
Async & lỗi Vì sao lỗi không bắt được, process tự thoát? async trong forEach; return thiếu await trong try; fire-and-forget không .catch
Số, ngày, chuỗi Vì sao tiền lệch, ngày lệch, id đổi giá trị? count(*) trả "1"; new Date('2026-10-18') là UTC; cột timestamp không timezone
Database & transaction Vì sao query chậm, dữ liệu trùng hoặc mất cập nhật? N+1; check-then-insert; BEGIN bằng pool.query
API & bảo mật Vì sao API lộ dữ liệu hoặc bị lợi dụng? nối chuỗi vào SQL raw; lấy object theo id không kiểm tra chủ sở hữu; jwt.decode thay vì verify
Hiệu năng & tài nguyên Vì sao chạy tốt khi test mà chậm/OOM trên production? pbkdf2Sync trong handler; Promise.all 10k phần tử; fetch không timeout

Đọc theo thứ tự trong bảng nếu mới vào nghề. Đã có kinh nghiệm thì nhảy thẳng tới checklist cuối mỗi trang.

Đang tải diagram…

  • Comment bằng link: “Chỗ này là return thiếu await”. Người nhận đọc được ví dụ đầy đủ và hậu quả, reviewer không phải giải thích lại.
  • Gắn mức độ: lỗi làm sai dữ liệu hoặc sập process (fire-and-forget, float tiền, check-then-insert) là blocker; lỗi hiệu năng ở đường ít gọi có thể là nit.
  • Biến thành lint/test khi lặp lại nhiều: ví dụ @typescript-eslint/no-floating-promises bắt Promise không được xử lý.
  • Lỗi mới gặp ở postmortem thì thêm thành cặp BAD/GOOD ở trang phù hợp.

Quy trình review đầy đủ xem Code review.

Chủ đề Bài
Event loop, vì sao code đồng bộ chặn mọi request Event loop Node.js
Transaction đúng cách với ORM Transaction patterns
Input validation, secret, injection Secure coding
Timeout và retry khi gọi ra ngoài Timeout budget

Tiếp theo: Async & lỗi.