[Series Thực Chiến E-commerce] Bài 1: Đặt những viên gạch đầu tiên - Khởi tạo Node.js Server
Chào anh em!
Nếu anh em đang muốn tự tay build một hệ thống backend cho một trang thương mại điện tử (e-commerce) từ con số 0, thì anh em đến đúng chỗ rồi đấy. Series này mình viết ra không phải để múa lý thuyết suông, mà là chia sẻ cách làm thực tế, step-by-step, chuẩn form mà các dự án production đang dùng.
Để xây một ngôi nhà vững chắc, việc đầu tiên là phải đổ móng. Bài 1 hôm nay cực kỳ nhẹ nhàng: Chúng ta sẽ setup project, cài đặt "đồ nghề" và dựng một con Node.js server cơ bản với Express. Bắt đầu luôn cho nóng nhé!
1. Sắm sửa "đồ nghề" (Khởi tạo project & Cài packages)
Đầu tiên, anh em tạo một thư mục trống cho dự án, mở terminal lên và gõ:
npm init -y
Lệnh này sẽ sinh ra file package.json để quản lý toàn bộ thông tin dự án. Tiếp theo, chúng ta sẽ cài đặt các thư viện cần thiết. Đây đều là những gương mặt thân quen trong làng backend Node.js:
npm i express dotenv express-async-handler jsonwebtoken mongoose bcrypt nodemon
Để mình giải thích nhanh qua tác dụng của "dàn đào" này cho anh em nào mới làm quen:
- express: Bộ khung (framework) chính, mỏng nhẹ nhưng cực kỳ mạnh mẽ để dựng server.
- dotenv: Giúp load các biến môi trường từ file .env. (Đừng bao giờ hardcode mật khẩu hay secret key vào source code nhé anh em!).
- express-async-handler: Một công cụ tuyệt vời để bắt lỗi (catch error) trong các hàm async/await mà không cần phải viết try...catch dài dòng ở mọi nơi.
- jsonwebtoken: Dùng để tạo và verify token, phục vụ cho việc làm tính năng đăng nhập, phân quyền sau này.
- mongoose: Cái này là thư viện ORM giúp Node.js giao tiếp với database MongoDB một cách mượt mà và an toàn.
- bcrypt: "Bảo kê" password của user bằng cách mã hóa (hash) chúng trước khi lưu vào database.
- nodemon: Tool "quốc dân" giúp tự động restart lại server mỗi khi anh em bấm Save file code. Không có nó thì code mỏi tay, restart mỏi tay hơn.
(Mẹo nhỏ: Anh em vào file package.json, thêm dòng "start": "nodemon server.js" vào phần scripts để sau này gõ npm start cho tiện nhé).
2. Định hình kiến trúc (Cấu trúc thư mục)
"Nhà sạch thì mát, code sạch thì dễ maintain". Đừng vứt tất cả code vào một file. Chút nữa dự án phình to ra, anh em sẽ khóc thét khi phải fix bug đấy. Ở đây mình dùng chuẩn MVC (Model - View - Controller) tùy biến lại cho API. Anh em tạo sẵn các thư mục thế này:
server/
│── config/ # Chứa các file cấu hình (kết nối database, cloudinary...)
│── controllers/ # Xử lý logic chính của từng route (hàm xử lý request/response)
│── middlewares/ # Các hàm trung gian (check quyền, bắt lỗi...)
│── models/ # Định nghĩa cấu trúc schema của database (Mongoose)
│── routes/ # Phân luồng các đường dẫn API
│── utils/ # Các hàm tiện ích dùng chung (format date, send email...)
│── .env # Nơi chứa biến môi trường cực kỳ nhạy cảm
│── server.js # File gốc để chạy ứng dụng
3. Viết những dòng code đầu tiên (Cấu hình server.js & .env)
Tạo file .env ở thư mục gốc. Ở thời điểm hiện tại, mình chỉ cần khai báo cổng chạy server:
PORT=3000
Tiếp theo, linh hồn của ứng dụng nằm ở file server.js. Anh em tạo file và ném đoạn code này vào:
const express = require('express');
require('dotenv').config();
const app = express();
// Lấy port từ file .env, nếu không có thì mặc định chạy cổng 3001
const port = process.env.PORT || 3001;
// Middleware cực kỳ quan trọng: giúp server đọc hiểu được data dạng JSON và Form Data từ client gửi lên
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Một API route cơ bản để test xem server có "thở" không
app.get('/', (req, res) => {
res.send("🚀 Server E-commerce is running...");
});
// Kích hoạt server
app.listen(port, () => {
console.log(`✅ Server đang chạy mượt mà tại http://localhost:${port}`);
});
Bây giờ mở terminal lên, gõ npm start (hoặc node server.js). Mở trình duyệt vào http://localhost:3000, nếu thấy dòng chữ "🚀 Server E-commerce is running..." thì xin chúc mừng, anh em đã hoàn thành xuất sắc bước đầu tiên!
Tổng kết Bài 1: Chúng ta đã setup xong môi trường, cấu trúc lại thư mục chuẩn mực và cho server chạy thành công. Ở trạng thái này, server giống như một mảnh đất đã được rào dậu gọn gàng.
Ở bài tiếp theo, chúng ta sẽ bắt đầu thiết lập kết nối tới cơ sở dữ liệu (MongoDB) và tạo một Collection đầu tiên nhé. Anh em có góp ý hay gặp lỗi gì lúc setup cứ ném vào phần comment, mình sẽ hỗ trợ. Hẹn gặp lại anh em ở Bài 2!
All rights reserved