Cơ sở lý thuyết và công nghệ sử dụng
Express JS
Express js là một Framework nhỏ, nhưng linh hoạt được xây dựng trên nền tảngcủa Nodejs Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc mobile.
Về các package hỗ trợ: Expressjs có vô số các package hỗ trợ.
Về performance: Express cung cấp thêm về các tính năng (feature) để dev lập trình tốt hơn Chứ không làm giảm tốc độ của NodeJS.
Và hơn hết, các Framework nổi tiếng của NodeJS hiện nay đều sử dụng
ExpressJS như một core function, chẳng hạn: SailsJS, MERN,
1.1.2 Cấu trúc của Express JS
Hình 1.1 Cấu trúc Epress JS
Cấu trúc Express JS vô cùng đơn giản:
Root app.js chứa các thông tin về cấu hình, khai báo, các định nghĩa, để ứngdụng của chúng ta chạy ok package.json chứa các package cho ứng dụng chạy Nếu bạn nào làm với PHP hoặc RoR rồi thì file này có chức năng tương tự như composer.jsonhoặc Gemfile Folder routes: chứa các route có trong ứng dụng Folder view: chứa view/template cho ứng dụng Folder public chứa các file css, js, images, cho ứng dụng 1.1.3 Tìm hiểu về Router trong Express
Router là một Object (khác Routing nhé), nó là một instance riêngcủa middleware và routes (Hai khái niệm này là gì thì chúng ta sẽ tìm hiểu saunhé) Chính vì nó là một instance của middleware và route nên nó có các chứcnăng của cả hai Chúng ta có thể gọi nó là một mini-application
Các Application dùng ExpressJS làm core đều có phần Router được tích hợp sẵn trong đó.
Router hoạt động như một middleware nên chúng ta có thể dùng nó nhưmột arguments Hoặc dùng nó như một arguments cho route khác
Chúng ta cũng có thể sử dụng Router để chia route.
1.1.3.2 Tìm hiểu về các method all của router router.all() Method này phù hợp với việc định nghĩa mang tính chất toàn cục cho các prefix
Nếu ta đặt route này trên cùng (top) thì nó yêu cầu tất cả các route bên dưới phải được requireAuthentication Có nghĩa là xác thực trước khi thực hiện mộthành động hay một task nào đó tiếp theo.
1.1.4 Tìm hiều về router.METHOD()
Router.METHOD() cung cấp cho chúng ta chức năng Routing trong
ExpressJS.Cụ thể METHOD() ở đây là các HTTP method mà chúng ta thường xuyên sửdụng Chẳng hạn GET, POST, PUT,.
Tên METHOD phải được viết thường Để bảo mật tốt hơn thì có thể sử dụng Regex để bắt các Endpoint
NodeJS
NodeJS là một mã nguồn được xây dựng dựa trên nền tảng Javascript V8 Engine,nó được sử dụng để xây dựng các ứng dụng web như các trang video clip, các forumvà đặc biệt là trang mạng xã hội phạm vi hẹp NodeJS là một mã nguồn mở được sửdụng rộng bởi hàng ngàn lập trình viên trên toàn thế giới
NodeJS có thể chạy trên nhiều nền tảng hệ điều hành khác nhau từ WIndow chotới Linux, OS X nên đó cũng là một lợi thế NodeJS cung cấp các thư viện phong phúở dạng Javascript Module khác nhau giúp đơn giản hóa việc lập trình và giảm thờigian ở mức thấp nhất
Khi nói đến NodeJS thì phải nghĩ tới vấn đề Realtime Realtime ở đây chính làxử lý giao tiếp từ client tới máy chủ theo thời gian thực 1.2.2 Các đặc tính của NodeJS
Không đồng bộ: Tất cả các API của NodeJS đều không đồng bộ( none- blocking), nó chủ yếu được dựa trên nền của NodeJS Server và chờ đợi Server trả dữ liệu về Việc di chuyển máy chủ đến các API tiếp theo sau khi gọi và cơ chế thông báo các sự kiện của NodeJS giúp máy chủ để có được một phản ứng từ các cuộc gọi API trươc(realtime).
Chạy rất nhanh: NodeJ được xây dựng dựa vào nền tảng V8 JavascriptEngine nên việc thực thi chương trình rất nhanh. Đơn luồng nhưng khả năng mở rộng cao: Node.js sử dụng một mô hìnhluồng duy nhất với sự kiện lặp cơ chế tổ chức sự kiện giúp các máy chủ đểđáp ứng một cách không ngăn chặn và làm cho máy chủ cao khả năng mở rộng như trái ngược với các máy chủ truyền thống mà tạo đề hạn chế để xửlý yêu cầu Node.js sử dụng một chương trình đơn luồng và các chươngtrình tương tự có thể cung cấp dịch vụ cho một số lượng lớn hơn nhiều sovới yêu cầu máy chủ truyền thống như Apache HTTP Server.
Không đệm: NodeJS không đệm bất kì một dữ liệu nào và các ứng dụng này chủ yếu là đầu ra dữ liệu.
Có giấy phép: NodeJS đã được cấp giấy phép bởiMIT License.
1.2.3 Hai NodeJS framework sử dụng
ExpressJS là một trong những framework phổ biến dùng để xây dựng API vàWebsite phổ biến nhất của NodeJS Nó được sử dụng rộng rãi đến mức hầu như mọidự án Web nào đều bắt đầu bằng việc tích hợp Express Có rất nhiều lý do để chọnExpressJS:
Có nhiều tính năng hỗ trợ tất cả những gì bạn cần trong việc xây dựng Web vàAPI
Quản lý các router dễ dàng
Cung cấp một nền tảng phát triển cho các API
Hỗ trợ nhiều thư viện và plugin
Bảo mật và an toàn hơn so với việc code thuần
Hỗ trợ cồng đồng tuyệt vời
SocketIO là một web-socket framework có sẵn cho nhiều ngôn ngữ lập trình Trong NodeJS, SocketIO cho phép xây dựng một các ứng dụng realtime như chatbot, tickers, dashboard APIs, và nhiều ứng dụng khác SocketIO có lợi íchhơn so với NodeJS thông thường.
Hỗ trợ route URL tùy chỉnh cho web socket
Tích hợp dễ dàng hơn với Express JS
Hỗ trợ clustering với Redis
MongoDB
MongoDB là phần mềm cơ sở dữ liệu mã nguồn mở NoSQL hỗ trợ đa nền tảngđược thiết kế theo hướng đối tượng Các bảng (trong MongoDB gọi là collection) có cấu trúc linh hoạt cho phép dữ liệu không cần tuân theo dạng cấu trúc nào.Vì thế, nó có thể dùng để lưu trữ dữ liệu có cấu trúc phức tạp và đa dạng.
Dữ liệuđược gọi là Big Data Đặc biệt, chương trình này lưu trữ dữ liệu vào collection theohướng tài liệu kiểu JSON thay vì bảng nên có hiệu suất cao và tính khả dụng cao.
NoSQL (Non-Relational SQL) là dạng cơ sở dữ liệu mã nguồn mở được ra đờinhư một mô hình tiến bộ hơn về tốc độ, tính năng,… so với hệ quản trị cơ sở dữ liệuquan hệ RDBMS NoSQL có kiểu dữ liệu JSON Đây là dạng dữ liệu kiểu key vàvalue cùng với hiệu suất nhanh và khả năng mở rộng không bị ràng buộc bởi việc tạokhóa ngoại, khóa chính,… nên được ưa chuộng và sử dụng rất phổ biến
Truy vấn ad hoc là một trong những tính năng tốt nhất của chương trình Nó hỗtrợ các trường, truy vấn phạm vi và tìm kiếm các biểu thức để trả về các trường tài liệucụ thể bao gồm các hàm JavaScript do người dùng xác định hoặc các truy vấn nàyđược cấu hình và trả về mẫu kết quả ngẫu nhiên có kích thước nhất định Bên cạnh đó,các trường trong MongoDB có thể được dùng để lập các chỉ mục chính và các chỉ mục phụ.
1.3.3.2 Nhân rộng Đây là tính năng mà chương trình cung cấp Replica set Nó bao gồm hai hoặcnhiều bản sao của dữ liệu Trong đó mỗi bản sao có thể đóng vai trò chính và phụ.
Trong quá trình nhân rộng, tất cả các dữ liệu ghi và đọc thực hiện trên bản sao chính
Bản sao thứ cấp sử dụng bản sao tích hợp để duy trì bản sao dữ liệu của bản chính
Trong trường hợp một bản sao chính thất bại, Replica set chọn ra một bản saothứ cấp để trở thành bản sao chính tiếp theo Replica thứ cấp có thể tùy chọn phục vụcác hoạt động nhưng dữ liệu cuối cùng chỉ nhất quán theo mặc định
Bằng cách sử dụng Sharding, MongoDB chia tỷ lệ theo chiều ngang để ngườidùng chọn một Shard key Xác định các dữ liệu được phân phối trong collection. Nhìnchung, dữ liệu được chia thành các phạm vi và được phân phối đồng đều dựa trên các Shard key Nó chạy trên nhiều máy chủ, cân bằng tải hoặc sao chép dữ liệu để giữhệ thống luôn hoạt động trong trường hợp có lỗi về phần cứng
Với tính năng lưu trữ tệp, MongoDB được sử dụng như một hệ thống tệp(GridFS) giúp cân bằng tải và sao chép dữ liệu trên nhiều máy tính để lưu trữ tệp.Trong đó, GridFS chia một tệp ra thành các phần hoặc các đoạn và lưu trữ thànhnhững tài liệu riêng biệt Bạn có thể truy cập GridFS bằng tiện ích Mongofiles hoặc plugin cho Nginx và Lighttpd
1.3.3.5 Tập hợp Ởtính năng tập hợp, chương trình này cung cấp ba cách chính để thực hiện tậphợp là Aggregation Pipeline, chức năng Mapreduce và Single-purpose Aggregation.Trong đó, theo tài liệu của MongoDB thì Aggregation Pipeline được công nhận làcung cấp hiệu suất tốt hơn hầu hết các hoạt động tổng hợp
1.3.3.6 Thực thi Javascript phía máy chủ
JavaScript thường được thực thi trong các truy vấn, các hàm tổng hợp và đượcgửi trực tiếp đến cơ sở dữ liệu.
1.3.3.7 Giới hạn kích thước collection
MongoDB hỗ trợ collection có kích thước cố định được gọi là collection giớihạn.
Nó có kích cỡ cố định theo sau thứ tự chèn làm tăng hiệu suất các hoạt động kháccó liên quan đến dữ liệu Khi dữ liệu vượt quá mức giới hạn thì các tài liệu cũ sẽ bị xóamà không cần dùng bất cứ dòng lệnh nào.
MongoDB còn có tính năng hỗ trợ cho các giao dịch ACID đa tài liệu, bắt đầu cóhiệu dụng từ phiên bản 4.0 vào tháng 6 năm 2018.
1.3.4 Ưu điểm của MongoDB Đầu tiên có thể nhắc đến là tính linh hoạt lưu trữ dữ liệu theo các kích cỡ khác nhau, dữ liệu dưới dạng hướng tài liệu JSON nên bạn có thể chèn vàothoải mái bất cứ thông tin gì bạn muốn.
Khác với RDBMS dữ liệu trong đây không có sự ràng buộc và không cóyêu cầu tuân theo khuôn khổ nhất định, điều này giúp bạn tiết kiệm thờigian cho việc kiểm tra sự thỏa mãn về cấu trúc nếu muốn chèn, xóa, cậpnhật hay thay đổi các dữ liệu trong bảng
MongoDB dễ dàng mở rộng hệ thống bằng cách thêm node vào cluster – cụm các node chứa dữ liệu giao tiếp với nhau Ưu điểm thứ tư là tốc độ truy vấn nhanh hơn nhiều so với hệ quản trị cơ sở dữ liệu quan hệ RDBMS do dữ liệu truy vấn được cached lên bộ nhớ RAMđể lượt truy vấn sau diễn ra nhanh hơn mà không cần đọc từ ổ cứng
Cũng là một ưu điểm về hiệu suất truy vấn của MongoDB, trường dữ liệu“_id” luôn được tự động đánh chỉ mục để đạt hiệu suất cao nhất
Dữ liệu trong MongoDB không bị ràng buộc như RDBMS nhưng người sửdụng lưu ý cẩn thận mọi thao tác để không xảy ra các kết quả ngoài ý muốngây ảnh hưởng đến dữ liệu
Một nhược điểm mà “dân công nghệ” hay lo ngại là bộ nhớ của thiết bị.Chương trình này thường tốn bộ nhớ do dữ liệu được lưu dưới dạng key- value, trong khi các collection chỉ khác về value nên sẽ lặp lại key dẫn đến thừa dữ liệu
Tổng quan về hệ thống
Biểu đồ use case
2.1.1 Biểu đồ use case tổng quan
Hình 2.1 Biểu đồ Use case tổng quan
2.1.2 Phân rã use case quản lý sản phẩm
Hình 2.2 Biểu đồ phân rã use case quản lý sản phẩm
2.1.3 Phân rã use case quản lý khách hàng
Hình 2.3 Biểu đồ phân rã use case quản lý khách hàng
2.1.4 Phân rã use case quản lý đơn hàng
Hình 2.4 Biểu đồ phân rã use case quản lý đơn hàng
Đặc tả use case
2.2.1 Đặc tả use case đăng nhập
Luồng sự kiện thay thế
2.2.2 Đặc tả use case đăng ký
Mã Use case UC02 Tên Use case Đăng Ký
Luồng sự kiện thay thế
2.2.3 Đặc tả use case tìm kiếm sản phẩm
Luồng sự kiện thay thế
2.2.4 Đặc tả use case xem chi tiết sản phẩm
Luồng sự kiện thay thế
2.2.5 Đặc tả use case đăng xuất
Luồng sự kiện thay thế
2.2.6 Đặc tả use case xem giỏ hàng
Luồng sự kiện thay thế
2.2.7 Đặc tả use case xóa sản phẩm khỏi giỏ hàng
Luồng sự kiện thay thế
2.2.8 Đặc tả use case đặt hàng
Luồng sự kiện thay thế
2.2.9 Đặc tả use case xem lịch sử đơn hàng
Luồng sự kiện thay thế
2.2.10 Đặc tả use case xem chi tiết đơn hàng
Luồng sự kiện thay thế
2.2.11 Đặc tả use case hủy đơn hàng
Luồng sự kiện thay thế
2.2.12 Đặc tả use case quản lý sản phẩm
Tìm kiếm(S) sự kiện thay thế
Luồng sự kiện thay thế
Luồng sự kiện thay thế
Luồng sự kiện thay thế
Luồng sự kiện thay thế
Luồng sự kiện thay thế
- R, S: Hệ thống hiển thị danh sách sản phẩm thỏa mãn.
- C, U, D: Hệ thống hiển thị thông báo xác nhận có thể cập nhật (Thêm, sửa, xóa) sản phẩm hay không, nếu có thể, cập nhật lại dữ liệu trong cơ sở dữ liệu.
Bảng 2.12 Đặc tả use case quản lý sản phẩm
2.2.13 Đặc tả use case quản lý khách hàng
Tương tự UC Tìm kiếm sản phẩm
Tương tự UC Xem danh sách sản phẩm
Tương tự UC Xem chi tiết sản phẩm
Tương tự UC Xóa sản phẩm
2.2.14 Dặc tả use case quản lý đơn hàng
Tương tự UC Tìm kiếm sản phẩm
Tương tự UC Xem danh sách sản phẩm
Tương tự UC Xem chi tiết sản phẩm
Tương tự UC Xóa sản phẩm
Biểu đồ tuần tự
Hình 2.5 Biểu đồ tuần tự use case đăng nhập
Hình 2.6 Biểu đồ tuần tự use case đăng ký
Hình 2.7 Biểu đồ tuần tự use case đăng xuất
Hình 2.8 Biểu đồ tuần tự use case thêm sản phẩm
2.3.5 UC Tìm kiếm sản phẩm
Hình 2.9 Biểu đồ tuần tự use case tìm kiếm sản phẩm
2.3.6 UC xem danh sách sản phẩm
Hình 2.10 Biểu đồ tuần tự use case xem danh sách sản phẩm
2.3.7 UC xem chi tiết sản phẩm
Hình 2.11 Biểu đồ tuần tự use case xem chi tiết sản phẩm
Hình 2.11 Biểu đồ tuần tự use case sửa sản phẩm
Hình 2.12 Biểu đồ tuần tự use case xóa sản phẩm
2.3.10 UC tìm kiếm khách hàng
Hình 2.13 Biểu đồ tuần tự use case tìm kiếm khách hàng
2.3.11 UC xem danh sách khách hàng
Hình 2.14 Biểu đồ tuần tự use case xem danh sách khách hàng
Thiết kế và xây dựng website bán hàng
Giao diện trang đăng nhập
Hình 3.1 Giao diện trang đăng nhập
Giao diện trang đăng ký
Hình 3.2 Giao diện trang đăng ký tài khoản
Giao diện quên mật khẩu
Hình 3.3 Giao diện trang quên mật khẩu
Giao diện trang chủ
Hình 3.4 Giao diện trang chủ
Giao diện danh sách sản phẩm
Hình 3.5 Giao diện trang danh sách sản phẩm
Giao diện xem chi tiết sản phẩm
Hình 3.6 Giao diện trang xem chi tiết sản phẩm
Giao diện giỏ hàng
Hình 3.7 Giao diện trang giỏ hàng
Giao diện trang thanh toán
Hình 3.8 Giao diện trang thanh toán
Giao diện trang thông tin tài khoản
Hình 3.9 Giao diện trang thông tin tài khoản
Triển khai thử nghiệm và đánh giá
Triển khai hệ thống
Do đây là một hệ thống được phát triển trên môi trường NodeJS nên để có thể chạy được thì cần một số bước sau:
B1 Máy tính cần được cài NodeJs Nếu máy tính chưa cài đặt thì có thể tải xuống theo đường link: https://nodejs.org/dist/v16.16.0/node-v16.16.0-x64.msi
B3 Mở cmd đến file mã nguồn và chạy câu lệnh ‘npm init’ để cài các thư viện cần thiết
B4 Tiếp tục chạy câu lệnh ‘npm run dev’ để khởi chạy chương trình
B5 Mở trình duyệt web truy cập đường link: http://localhost:3000
Đánh giá hệ thống
Hệ thống hoạt động bình thường Tuy nhiên UI/UX chưa được tối ưu nên mang lại trải nghiệm chưa tốt cho người dùng.
Hệ thống chưa được hoàn chỉnh.