Giới thiệu dự án

Sự bùng nổ của thị trường thương mại điện tử (E-commerce) tại Việt Nam với tốc độ tăng trưởng kép hàng năm (CAGR) đạt trên 25% đã thúc đẩy các doanh nghiệp bán lẻ thiết bị công nghệ phải nhanh chóng số hóa quy trình kinh doanh. Tuy nhiên, các giải pháp web truyền thống thường gặp rào cản lớn về hiệu năng hiển thị, khả năng tối ưu hóa công cụ tìm kiếm (Search Engine Optimization - SEO) và tính linh hoạt trong quản lý dữ liệu sản phẩm có cấu hình đa dạng.

Đồ án tốt nghiệp "Tìm hiểu ExpressJS, NextJS và phát triển website bán đồ điện tử" được thực hiện bởi nhóm sinh viên ngành Công nghệ Thông tin, Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh (HCMUTE), dưới sự hướng dẫn của TS. Lê Văn Vinh. Dự án tập trung giải quyết bài toán cốt lõi: kết hợp sức mạnh kết xuất phía máy chủ (Server-Side Rendering - SSR) của Next.js và nền tảng xử lý bất đồng bộ non-blocking I/O của Express.js để tạo ra một hệ thống E-commerce hiện đại, tối ưu SEO vượt trội và nâng cao trải nghiệm người dùng trên đa nền tảng.

                           +------------------------------------+
                           |        Client / Web Browser        |
                           +-----------------+------------------+
                                             |
                                             v
                           +------------------------------------+
                           |    Next.js SSR Frontend Engine     |
                           |   (React 16.13, Bootstrap 4, Redux)|
                           +-----------------+------------------+
                                             | RESTful API
                                             v
                           +------------------------------------+
                           |   Express.js Backend API Gateway   |
                           |     (Node.js v14, JWT, Router)     |
                           +-----------------+------------------+
                                             | Mongoose ODM
                                             v
                           +------------------------------------+
                           |    MongoDB NoSQL Document Store    |
                           | (Products, Users, Orders, Supplies)|
                           +------------------------------------+

Vấn đề thực tiễn và bài toán cần giải quyết

Các cửa hàng kinh doanh thiết bị điện thoại, máy ảnh, tivi truyền thống đang đối mặt với nhiều điểm nghẽn nghiêm trọng:

  • Hạn chế quản lý thủ công: Quản lý kho, theo dõi đơn hàng và thông tin khách hàng bằng sổ sách hoặc công cụ rời rạc dễ dẫn đến sai lệch tồn kho, nhầm lẫn trạng thái xử lý đơn hàng.
  • Hạn chế tiếp cận khách hàng: Khoảng cách địa lý làm giảm khả năng tiếp cận người tiêu dùng tiềm năng; chi phí mặt bằng và vận hành cửa hàng vật lý ngày càng tăng cao.
  • Điểm yếu SEO của Single Page Application (SPA): Các ứng dụng ReactJS thuần (Client-Side Rendering) gặp trở ngại khi web crawler (như Googlebot) khó thu thập nội dung HTML chưa render, làm giảm thứ hạng tìm kiếm tự nhiên của sản phẩm.
  • Trải nghiệm di động kém: Giao diện chưa đáp ứng chuẩn Responsive Web Design, gây gián đoạn trải nghiệm mua sắm trên thiết bị di động và máy tính bảng.

Mục tiêu dự án

  1. Nghiên cứu toàn diện kiến trúc Single Page Application, Virtual DOM trong React.js và cơ chế Server-Side Rendering trong Next.js.
  2. Nắm vững mô hình bất đồng bộ hướng sự kiện (Event-Driven, Non-blocking I/O) của Node.js cùng hệ thống Routing, Middleware của Express.js.
  3. Thiết kế cơ sở dữ liệu phi quan hệ NoSQL linh hoạt trên MongoDB, tối ưu hóa cho cấu trúc sản phẩm công nghệ có nhiều thuộc tính động.
  4. Xây dựng hoàn chỉnh website bán đồ điện tử với 2 phân hệ chuyên biệt: Cửa hàng trực tuyến (Client Storefront) và Trang quản trị tập trung (Admin Dashboard).
  5. Đảm bảo tốc độ phản hồi API dưới 150ms, thời gian dựng trang đầu (First Contentful Paint) dưới 1.2 giây và tương thích 100% trên các kích thước màn hình.

Phạm vi và giới hạn

  • Phạm vi chức năng: Quản lý danh mục, tìm kiếm đa tiêu chí, giỏ hàng, đặt hàng, thanh toán trực tuyến, quản lý tài khoản khách hàng/nhân viên, phân quyền truy cập, xác thực OAuth (Google/Facebook), quản lý banner/slider và thống kê doanh thu.
  • Giới hạn hệ thống: Đồ án tập trung vào môi trường vận hành máy chủ Node.js đơn cụm, tích hợp kênh hỗ trợ khách hàng qua Messenger chat widget; module thanh toán ngân hàng trực tuyến dừng lại ở mức mô phỏng quy trình xác thực giao dịch an toàn.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát thực tế các nền tảng thương mại điện tử hàng đầu tại Việt Nam như Nguyễn Kim, Thế Giới Di Động, LazadaTiki cho thấy: việc tối ưu hóa tốc độ tải trang danh mục và khả năng tìm kiếm sản phẩm chính xác là yếu tố quyết định tỷ lệ chuyển đổi đơn hàng.

Tiêu chí phân tích Monolithic (PHP / WordPress) Pure React SPA (CRA) Giải pháp Next.js + Express.js + MongoDB
Khả năng SEO Tốt (SSR mặc định) Kém (Cần prerender/Hydration chậm) Xuất sắc (SSR tự động qua Next.js)
Tốc độ render trang Trung bình (Tải lại toàn trang) Nhanh sau lần tải đầu Rất nhanh (Zero Setup, Code Splitting)
Xử lý Concurrent I/O Kém (Mỗi request chiếm 1 thread) Phụ thuộc Backend Rất cao (V8 Non-blocking I/O)
Linh hoạt cấu trúc dữ liệu Cố định (RDBMS Schema) Phụ thuộc Backend Cao (Document JSON Schema)
Chi phí bảo trì & mở rộng Trung bình Tách biệt Front/Back Dễ module hóa, mở rộng độc lập

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must Have (Bắt buộc): Đăng ký/đăng nhập xác thực JWT, hiển thị danh mục sản phẩm phân tầng, tìm kiếm sản phẩm theo từ khóa, giỏ hàng tương tác thời gian thực, đặt hàng và cập nhật trạng thái đơn hàng, phân quyền Admin/Staff/Customer.
  • Should Have (Nên có): Đăng nhập bên thứ ba (Google OAuth 2.0, Facebook SDK), xem nhanh thông tin chi tiết (Quick View Modal), Responsive UI chuẩn Bootstrap 4, bộ lọc theo thương hiệu/nhà cung cấp.
  • Could Have (Có thể có): Tích hợp chat Messenger trực tiếp trên giao diện, quản lý slide quảng cáo động, gửi email tự động xác nhận đơn hàng.
  • Won't Have (Chưa thực hiện): Đề xuất gợi ý sản phẩm bằng Machine Learning, xử lý thanh toán đa tiền tệ quốc tế.

Thiết kế hệ thống

Hệ thống được thiết kế theo mô hình tách biệt hoàn toàn giữa Frontend (Next.js Application) và Backend (RESTful API Service), giao tiếp qua giao thức HTTP/HTTPS với định dạng dữ liệu chuẩn JSON.

graph TD
    User([Khách hàng / Quản trị viên]) <-->|HTTPS / HTML / JSON| NextApp[Next.js SSR Frontend]
    NextApp <-->|REST API Calls / JWT| ExpressServer[Express.js API Backend]
    ExpressServer --> AuthMid[Authentication & RBAC Middleware]
    AuthMid --> Controllers[Express Controllers]
    Controllers --> MongooseLayer[Mongoose ODM Data Layer]
    MongooseLayer <-->|TCP / Binary JSON| MongoDB[(MongoDB Database)]

Technology Stack và phiên bản chi tiết

  • Giao diện người dùng (Frontend): Next.js v9.4.4, ReactJS v16.13.1, Redux v4.0.5, Bootstrap v4.5.0, Axios v0.19.2, Styled-JSX.
  • Máy chủ ứng dụng (Backend): Node.js v14.15.0 LTS (V8 Engine), Express.js v4.17.1, Body-Parser v1.19.0, Cors v2.8.5.
  • Xác thực & Bảo mật: JSON Web Token (JWT) v8.5.1, Bcrypt.js v2.4.3, Passport.js v0.4.1 (Passport-Google, Passport-Facebook).
  • Cơ sở dữ liệu: MongoDB Community Server v4.2.8, Mongoose ODM v5.9.18.

Thiết kế cơ sở dữ liệu (Database Schema)

Hệ thống sử dụng cơ chế NoSQL Document-Oriented Data Model với 8 Collections chính:

+-----------------------------------------------------------------------------------+
|                              MONGODB DATABASE SCHEMA                              |
+-------------------+ +-------------------+ +-------------------+ +-----------------+
|     products      | |       users       | |      orders       | |   categories    |
+-------------------+ +-------------------+ +-------------------+ +-----------------+
| _id: ObjectId     | | _id: ObjectId     | | _id: ObjectId     | | _id: ObjectId   |
| name: String      | | username: String  | | user_id: ObjectId | | name: String    |
| price: Number     | | email: String     | | items: Array      | | slug: String    |
| discount: Number  | | password: String  | | total_amt: Number | | desc: String    |
| images: [String]  | | role: String      | | status: String    | | status: Boolean |
| category: ObjectId| | phone: String     | | shipping_addr: Obj| +-----------------+
| supplier: ObjectId| | address: String   | | created_at: Date  |
| specs: Object     | +-------------------+ +-------------------+
+-------------------+

Thiết kế API Endpoints (RESTful Standard)

  • GET /api/v1/products: Truy vấn danh sách sản phẩm (hỗ trợ phân trang, lọc theo category, sorting).
  • GET /api/v1/products/:id: Lấy chi tiết thông số kỹ thuật và hình ảnh của một sản phẩm.
  • POST /api/v1/orders: Tạo mới đơn đặt hàng từ giỏ hàng.
  • POST /api/v1/auth/login: Xác thực tài khoản người dùng, cấp phát JWT Bearer Token.
  • GET /api/v1/admin/orders: API phân quyền (RBAC) dành cho Admin/Nhân viên kiểm tra danh sách đơn hàng.

Implementation và kết quả

Development Process

Dự án được triển khai theo quy trình phân đoạn (Phased Iteration) trong thời gian 18 tuần (24/02/2020 – 01/07/2020):

  • Giai đoạn 1 (Tuần 1 - 4): Khảo sát nghiệp vụ bán lẻ đồ điện tử, phân tích use case, thiết kế mock-up giao diện và cấu trúc Document Database trên MongoDB.
  • Giai đoạn 2 (Tuần 5 - 10): Xây dựng Core API Service bằng Express.js, thiết lập Mongoose Schema, triển khai Middleware xử lý lỗi, xác thực JWT và kiểm thử endpoints qua Postman.
  • Giai đoạn 3 (Tuần 11 - 15): Phát triển giao diện người dùng và Admin Dashboard bằng Next.js, tích hợp Redux Store quản lý giỏ hàng, kết nối RESTful API và cấu hình cơ chế SSR.
  • Giai đoạn 4 (Tuần 16 - 18): Kiểm thử tích hợp (Integration Test), tối ưu hóa tốc độ tải trang, đóng gói và triển khai hệ thống.

Kỹ thuật then chốt 1: Server-Side Rendering với Next.js

Đảm bảo mã HTML của sản phẩm được máy chủ render đầy đủ trước khi gửi về client, giúp các bot tìm kiếm đọc được toàn bộ metadata, thẻ tiêu đề và thông số sản phẩm:

// pages/product/[id].js - Next.js SSR Implementation
import React from 'react';
import axios from 'axios';
import Layout from '../../components/Layout';

const ProductDetail = ({ product, error }) => {
  if (error) return <div className="alert alert-danger">Không tìm thấy sản phẩm!</div>;

  return (
    <Layout title={`${product.name} - Giá tốt nhất`}>
      <div className="container mt-4">
        <div className="row">
          <div className="col-md-6">
            <img src={product.images[0]} alt={product.name} className="img-fluid rounded" />
          </div>
          <div className="col-md-6">
            <h1 className="h3">{product.name}</h1>
            <p className="text-danger font-weight-bold h4">{product.price.toLocaleString()} VNĐ</p>
            <div className="specs-table mt-3" dangerouslySetInnerHTML={{ __html: product.description }} />
            <button className="btn btn-primary btn-lg mt-3">Thêm vào giỏ hàng</button>
          </div>
        </div>
      </div>
    </Layout>
  );
};

export async function getServerSideProps(context) {
  const { id } = context.params;
  try {
    const res = await axios.get(`http://localhost:5000/api/v1/products/${id}`);
    return { props: { product: res.data } };
  } catch (err) {
    return { props: { error: true } };
  }
}

export default ProductDetail;

Kỹ thuật then chốt 2: Pipeline xử lý Middleware và Xác thực trên Express.js

Kiểm soát quyền truy cập dựa trên vai trò (Role-Based Access Control - RBAC) tại tầng Backend:

// middleware/auth.js - Express Middleware Pipeline
const jwt = require('jsonwebtoken');

const verifyTokenAndRole = (allowedRoles = []) => {
  return (req, res, next) => {
    const authHeader = req.headers['authorization'];
    const token = authHeader && authHeader.split(' ')[1];

    if (!token) {
      return res.status(401).json({ success: false, message: 'Yêu cầu xác thực tài khoản' });
    }

    jwt.verify(token, process.env.JWT_SECRET_KEY, (err, decoded) => {
      if (err) {
        return res.status(403).json({ success: false, message: 'Token không hợp lệ hoặc đã hết hạn' });
      }

      if (allowedRoles.length > 0 && !allowedRoles.includes(decoded.role)) {
        return res.status(403).json({ success: false, message: 'Bạn không có quyền thực hiện hành động này' });
      }

      req.user = decoded;
      next(); // Chuyển tiếp request đến Controller tiếp theo
    });
  };
};

module.exports = { verifyTokenAndRole };

Testing và Validation

Hệ thống đã trải qua các đợt kiểm thử chức năng (Functional Testing) và hiệu năng (Stress Testing) trên môi trường thử nghiệm:

  • Kiểm thử đơn vị & API: 56 test cases cho các API endpoints; tỷ lệ hoàn thành đạt 100% không phát sinh lỗi HTTP 500.
  • Kiểm thử bảo mật: Xác thực mật khẩu mã hóa Bcrypt 10 rounds; ngăn chặn thành công 100% các cuộc tấn công dạng NoSQL Injection cơ bản nhờ Mongoose schema strict type casting.
  • Đo lường hiệu năng: Kiểm tra tải với công cụ mô phỏng 200 người dùng đồng thời (Concurrent Users). Kết quả ghi nhận:
    • Thời gian phản hồi API trung bình: 78ms.
    • Tốc độ phản hồi trang chủ Next.js (SSR): 0.95s.
    • Tỷ lệ lỗi request (Error Rate): 0.00%.
+-------------------------------------------------------------------------------+
|                       GOOGLE LIGHTHOUSE BENCHMARK SCORE                       |
+----------------------+--------------------+-------------------+---------------+
|   Performance: 88    |  Accessibility: 92 | Best Practice: 95 |   SEO: 96     |
+----------------------+--------------------+-------------------+---------------+
|  First Contentful Paint (FCP): 1.1s       | Speed Index: 1.4s                 |
|  Time to Interactive (TTI): 1.6s          | Cumulative Layout Shift: 0.01     |
+-------------------------------------------+-----------------------------------+

Kết quả đạt được

Hệ thống đáp ứng toàn bộ các chức năng đã đăng ký trong nhiệm vụ đồ án:

  1. Giao diện người dùng responsive chuẩn mực, hiển thị chính xác trên Desktop, Tablet (iPad Pro/Air) và Smartphone (iOS/Android).
  2. Quy trình mua hàng hoàn chỉnh: Chọn sản phẩm -> Giỏ hàng (Redux) -> Điền thông tin giao hàng -> Xác nhận đơn hàng.
  3. Trang quản trị hỗ trợ đầy đủ thao tác CRUD: Sản phẩm, Danh mục, Nhà cung cấp, Nhân viên, Khách hàng và Đơn hàng.
  4. Cơ chế đồng bộ dữ liệu tức thời giữa Express.js API và MongoDB NoSQL Database.

Đổi mới và đóng góp

  1. Khắc phục triệt để hạn chế SEO của kiến trúc React truyền thống: Thay vì sử dụng Create-React-App thuần (CSR), đồ án tích hợp Next.js SSR giúp mã nguồn HTML chứa đầy đủ dữ liệu khi Googlebot crawl, nâng điểm chỉ số SEO kỹ thuật từ mức 52/100 (CSR) lên 96/100 (SSR).
  2. Tối ưu hóa thời gian hiển thị đầu tiên (FCP): Giảm thời gian chờ FCP từ 2.4s xuống còn 1.1s (cải thiện 54.1% tốc độ hiển thị) nhờ cơ chế Automatic Code Splitting theo từng trang của Next.js.
  3. Mô hình kiến trúc phân lớp rõ ràng (Separation of Concerns): Tách bạch hoàn toàn Backend REST API và Frontend Presentation Layer, tạo điều kiện thuận lợi cho việc phát triển thêm ứng dụng di động (React Native) trong tương lai mà không cần viết lại API.
  4. Tài liệu hóa quy trình xây dựng MERN/MENN Stack: Đóng góp tài liệu học thuật và mẫu triển khai thực tế có giá trị tham khảo cao cho sinh viên ngành Công nghệ thông tin về cách áp dụng Next.js kết hợp Express.js.

Ứng dụng thực tế và triển khai

Khả năng ứng dụng thực tế

Hệ sinh thái của đồ án sẵn sàng chuyển giao và triển khai cho các cửa hàng bán lẻ thiết bị số, linh kiện máy tính, phụ kiện điện thoại vừa và nhỏ nhằm thiết lập kênh bán hàng online tự chủ, giảm phụ thuộc vào các sàn thương mại điện tử trung gian.

                                [ Cloudflare CDN / SSL ]
                                           |
                                           v
                              [ Nginx Reverse Proxy: 80/443 ]
                                     |             |
                   +-----------------+             +------------------+
                   | Proxy /                         | Proxy /api
                   v                                 v
        [ Next.js Node Server:3000 ]      [ Express API Server:5000 ]
        (PM2 Cluster Mode: 2 Cores)       (PM2 Cluster Mode: 2 Cores)
                                                           |
                                                           v
                                              [ MongoDB Cluster Database ]

Quy trình triển khai hệ thống (Deployment Pipeline)

  1. Chuẩn bị máy chủ: Máy chủ ảo VPS Linux (Ubuntu 20.04 LTS / 2 Core CPU / 4GB RAM).
  2. Cài đặt môi trường: Cài đặt Node.js v14.x, MongoDB Server v4.2 và Nginx Web Server.
  3. Quản lý tiến trình với PM2:
    # Khởi chạy Express Backend API
    cd backend && pm2 start server.js --name "express-api" -i max
    
    # Build và khởi chạy Next.js Frontend
    cd frontend && npm run build && pm2 start npm --name "next-frontend" -- start
    
  4. Cấu hình Nginx Reverse Proxy: Chuyển tiếp cổng 80/443 tới cổng nội bộ 3000 (Next.js) và đường dẫn /api tới cổng 5000 (Express.js), thiết lập chứng chỉ SSL Let's Encrypt tự động.

Phân tích hiệu quả kinh tế (Cost-Benefit Analysis)

  • Chi phí đầu tư ban đầu: Tiết kiệm khoảng 70% chi phí bản quyền phần mềm so với các giải pháp thương mại đóng gói (như Magento Enterprise hoặc Shopify Plus).
  • Chi phí vận hành: Một máy chủ Cloud VPS tiêu chuẩn ($10 - $20/tháng) đủ năng lực đáp ứng lưu lượng truy cập từ 50,000 – 100,000 lượt truy cập/tháng.
  • Thời gian hoàn vốn (ROI): Dự kiến từ 3 đến 6 tháng nhờ tối ưu hóa chi phí quản lý đơn hàng và mở rộng doanh thu qua kênh tìm kiếm tự nhiên.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Hệ thống phân tích thống kê doanh thu mới dừng ở mức tổng hợp cơ bản theo thời gian, chưa có biểu đồ trực quan hóa chuyên sâu (như Chart.js/D3.js).
  • Module thanh toán trực tuyến chưa kết nối trực tiếp với cổng thanh toán chính thức (như VNPAY, MoMo, ZaloPay Sandbox).
  • Việc phân quyền nhân viên chưa hỗ trợ tạo các nhóm quyền tùy biến linh hoạt (Custom RBAC Permissions).

Hướng phát triển trong tương lai

  • Tích hợp cổng thanh toán trực tuyến VNPAY/MoMo: Nâng cấp hệ thống xử lý Webhook và mã hóa chữ ký số an toàn (Checksum/HMAC SHA512).
  • Nâng cấp kiến trúc Microservices: Tách riêng Service quản lý đơn hàng (Order Service) và Service quản lý kho (Inventory Service) để tăng khả năng chịu tải độc lập.
  • Tích hợp Chatbot AI và Recommendation Engine: Sử dụng giải thuật lọc cộng tác (Collaborative Filtering) để cá nhân hóa gợi ý sản phẩm cho từng khách hàng.
  • Phát triển Progressive Web App (PWA): Tăng tốc độ trải nghiệm và hỗ trợ nhận thông báo đẩy (Push Notifications) khi có khuyến mãi mới.

Đối tượng hưởng lợi

  • Sinh viên ngành CNTT: Tài liệu tham khảo thực tế về kiến trúc phần mềm hiện đại, mẫu code chuẩn mực về tích hợp Next.js với Express.js và thiết kế NoSQL Database.
  • Lập trình viên Fullstack: Nắm vững giải pháp xử lý Server-Side Rendering cho React, cách tổ chức State Management với Redux và kỹ thuật bảo mật RESTful API.
  • Chủ doanh nghiệp / Cửa hàng bán lẻ: Sở hữu giải pháp website bán hàng công nghệ chuẩn SEO, chi phí đầu tư thấp, tốc độ tải nhanh và dễ dàng quản lý vận hành.
  • Nhà nghiên cứu học thuật: Cung cấp số liệu đối sánh thực nghiệm cụ thể giữa hiệu năng kết xuất SSR và CSR trong bài toán thương mại điện tử.

Câu hỏi thường gặp

1. Cần chuẩn bị cấu hình phần cứng tối thiểu nào để triển khai hệ thống?

Hệ thống yêu cầu máy chủ Linux (Ubuntu 18.04+) với tối thiểu 1 vCPU, 2GB RAM và 20GB dung lượng ổ cứng SSD. Để vận hành tối ưu trong môi trường thực tế có 10,000 người dùng hàng ngày, khuyến nghị sử dụng cấu hình 2 vCPU, 4GB RAM cùng PM2 Cluster Mode.

2. Hệ thống xử lý thế nào khi lượng truy cập tăng đột biến (Flash Sale)?

Nhờ kiến trúc bất đồng bộ non-blocking của Node.js kết hợp cùng cơ chế Static Asset Caching của Next.js, hệ thống có thể chịu tải tốt. Khi cần mở rộng quy mô lớn hơn, có thể triển khai nhiều instance Backend phía sau Nginx Load Balancer và chuyển MongoDB sang cụm Replica Set.

3. Làm thế nào để tích hợp thêm các cổng thanh toán như VNPAY hoặc MoMo?

Express.js Backend đã được module hóa sẵn sàng. Lập trình viên chỉ cần tạo thêm route xử lý URL redirect và IPN Webhook trong thư mục routes/payment.js, kiểm tra tính toàn vẹn dữ liệu qua thuật toán băm SHA256/SHA512 do cổng thanh toán cung cấp.

4. Chi phí duy trì và bảo trì hệ thống hàng năm là bao nhiêu?

Chi phí duy trì bao gồm: Tên miền (.vn hoặc .com) khoảng 250,000 – 750,000 VNĐ/năm và máy chủ Cloud VPS khoảng 1,500,000 – 3,000,000 VNĐ/năm. Không phát sinh chi phí bản quyền phần mềm do toàn bộ công nghệ sử dụng đều là mã nguồn mở.

5. Dữ liệu NoSQL trên MongoDB có đảm bảo tính toàn vẹn cho đơn hàng không?

Hệ thống sử dụng Mongoose Schema Validation nghiêm ngặt ở tầng ứng dụng kết hợp kiểm tra tính hợp lệ trước khi lưu (Pre-save Hooks). Các giao dịch trừ số lượng tồn kho và tạo hóa đơn được kiểm soát logic chặt chẽ để ngăn ngừa hiện tượng sai lệch dữ liệu.


Kết luận

Đồ án tốt nghiệp "Tìm hiểu ExpressJS, NextJS và phát triển website bán đồ điện tử" của sinh viên Nguyễn Văn Lành và Lê Mạnh Hùng (Trường ĐH Sư phạm Kỹ thuật TP.HCM) đã giải quyết trọn vẹn bài toán ứng dụng công nghệ hiện đại vào thực tiễn kinh doanh. Bằng cách kết hợp linh hoạt giữa khả năng Server-Side Rendering tối ưu SEO của Next.js và hiệu năng xử lý mạnh mẽ của Express.js cùng MongoDB, dự án đã tạo ra một sản phẩm thương mại điện tử hoàn chỉnh, tốc độ cao và sẵn sàng đáp ứng nhu cầu thực tế của thị trường bán lẻ thiết bị công nghệ.