Bối cảnh
Backend kiểu Twitter viết bằng TypeScript trên Express + MongoDB. Tự dựng để đi sâu phần server: xác thực, upload media, và cách chia tầng cho một API có nhiều nhóm chức năng.
Vấn đề
Một API thật cần nhiều thứ mà bản tutorial thường bỏ qua: chặn gọi dồn, kiểm dữ liệu đầu vào, đặt header bảo mật, xử lý ảnh trước khi lưu, và tài liệu để người khác dùng được.
Giải pháp
Chia tầng rõ ràng thay vì dồn hết vào route:
Phòng thủ đặt ở tầng middleware, không rải trong controller:
helmetđặt các header bảo mậtexpress-rate-limitchặn gọi dồnexpress-validatorkiểm dữ liệu vào trước khi tới controllerjsonwebtokencho xác thực
Upload và ảnh: formidable nhận file, sharp xử lý trước khi lưu — không
để file thô đi thẳng vào storage.
Vận hành: PM2 (ecosystem.config.js) chạy production, Docker đóng gói kèm
một Dockerfile.dev riêng cho môi trường phát triển.
Kết quả
- 3 nhóm route:
users,medias,static - Khoảng 85 KB mã TypeScript
- Tài liệu Swagger sinh tự động từ chú thích trong code