Works/2024/Twitter-Node-Server
Live in production
TypeScript
2024
Updated Jul 2024

Twitter-Node-Server.

Backend kiểu Twitter viết bằng TypeScript trên Express và MongoDB, chia tầng routes/controllers/services/models, kèm JWT, rate limit, kiểm dữ liệu đầu vào và xử lý ảnh khi upload.

shipped · production
▦ /2024 · TypeScript
Shipped · TypeScript
02

Project narrative.

from the maker

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:

middlewares routes controllers services models

Phòng thủ đặt ở tầng middleware, không rải trong controller:

  • helmet đặt các header bảo mật
  • express-rate-limit chặn gọi dồn
  • express-validator kiểm dữ liệu vào trước khi tới controller
  • jsonwebtoken cho 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
03

Architecture flow.

2 layers · swappable
01
Layer

API / orchestration layer

Express + TypeScript cho tầng API
JWT (jsonwebtoken) cho xác thực
helmet đặt header bảo mật
express-rate-limit chặn gọi dồn
express-validator kiểm dữ liệu đầu vào
formidable + sharp cho upload và xử lý ảnh
swagger-jsdoc sinh tài liệu API
PM2 chạy production
Docker, có bản riêng cho môi trường dev
02
Layer

Data layer

MongoDB lưu dữ liệu
04

Technical stack.

5 tags
TypeScript
NodeJS
ExpressJS
MongoDB
Docker