CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1. Các khái niệm cơ bản 1. MERN Stack là gì? MERN stack là sự kết hợp của các công nghệ phổ biến nhất hiện nay và các công nghệ này đều liên quan đến JavaScript như MongoDB, ExpressJS, ReactJS, NodeJS. Lập trình viên thường dùng MERN stack để xây dựng ứng dụng React Universal.
Giới thiệu NodeJS NodeJS là một môi trường runtime chạy JavaScript đa nền tảng và có mã nguồn mở, được sử dụng để chạy các ứng dụng web bên ngoài trình duyệt của client. Nền tảng này được phát triển bởi Ryan Dahl vào năm 2009, được xem là một giải pháp hoàn hảo cho các ứng dụng sử dụng nhiều dữ liệu nhờ vào mô hình hướng sự kiện (event-driven) không đồng bộ. Hình 2: Giới thiệu NodeJs 8 b. Lịch sử ra đời Năm 2009, NodeJS được viết bởi lập trình viên Ryan Dahl.
Node Js được tạo lần đầu cho hệ điều hành Linux sử dụng. Nó được phát triển vào bảo trì bởi Ryan Dahl và được tài trợ bởi Joyent. Tháng 1 năm 2010, trình quản lý gói npm cho NodeJS được ra mắt. Tháng 6 năm 2011, phiên bản Windows gốc của NodeJS được triển khai bởi Microsoft và Joyent.
Tháng 12 năm 2014, do xung đột nội bộ nên NodeJS bị chia rẽ, IO.js được hình thành. Tháng 6 năm 2015, cộng đồng IO.js và cộng đồng NodeJS đã thống nhất bỏ phiếu để hợp tác với nhau dưới dạng NodeJS Foundation. Ưu và nhược điểm Ưu điểm: - Node.js sử dụng JavaScript cả trên server-side và client-side, giúp đơn giản hóa quá trình phát triển và chia sẻ mã nguồn. - Hiệu suất cao: Node.js sử dụng kiến trúc non-blocking I/O, giúp tối ưu hóa hiệu suất cho các ứng dụng xử lý nhiều kết nối đồng thời.
- Môi trường thời gian thực: Node.js thích hợp cho các ứng dụng yêu cầu xử lý thời gian thực, như trò chơi trực tuyến, ứng dụng trò chơi, và chat trực tuyến. - Nhanh chóng xây dựng MVP (Minimum Viable Product): Node.js giúp tạo ra các sản phẩm MVP một cách nhanh chóng, giúp các doanh nghiệp đưa sản phẩm ra thị trường nhanh hơn. Nhược điểm: - Khả năng quản lý dự án: Với ứng dụng lớn và phức tạp, quản lý mã nguồn có thể trở nên khó khăn nếu không có cấu trúc dự án tốt. - Không thích hợp cho các ứng dụng CPU-bound: Node.js không phải là lựa chọn tốt cho các ứng dụng đòi hỏi nhiều xử lý CPU, như các thuật toán phức tạp và tính toán.
Ứng dụng trong đề tài - Hệ thống APIs: Tương tác với database và trả về dữ liệu cho người dùng.js: Cung cấp các chức năng nhận diện khuôn mặt và lưu trữ thông tin khuôn mặt một cách dễ dàng và hiệu quả. - Ứng dụng truy vấn tới cơ sở dữ liệu NoSQL: Với cơ sở dữ liệu MongoDB thì NodeJS là sự lựa chọn hoàn hảo vì nó có nhiều thư viện hỗ trợ mạnh. Giới thiệu ExpressJS Expressjs là một framework được xây dựng trên nền tảng của Nodejs. Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc mobile.
Expressjs hỗ trợ các method HTTP và middleware tạo ra API vô cùng mạnh mẽ và dễ sử dụng. Lịch sử phát triển Năm 2009, Express được tạo ra bởi TJ Holowaychuk như một framework nhỏ gọn để xây dựng ứng dụng web trong Node. Ban đầu, Express chỉ là một phần mở rộng của Connect, một middleware framework cho Node. Năm 2010, Phiên bản đầu tiên của Express (Express 1.0) được phát hành.
Với Express, người phát triển có thể dễ dàng xây dựng và quản lý các tuyến đường (routes) và middleware trong ứng dụng web.0 được phát hành. Đây là phiên bản mang lại nhiều thay đổi lớn và cải tiến so với phiên bản trước đó.0 đã tách riêng phần middleware của Connect và tích hợp nó vào Express, giúp tăng tính linh hoạt và hiệu suất của framework. Từ năm 2014 đến nay, Express tiếp tục phát triển và trở thành một trong những framework phát triển web phổ biến nhất trong cộng đồng Node. Nó có một cộng đồng lớn và năng động, cung cấp rất nhiều các module và middleware hữu ích cho việc xây dựng ứng dụng web.
Ưu và nhược điểm Ưu điểm - Đơn giản và dễ sử dụng: ExpressJS có cú pháp đơn giản và dễ hiểu, giúp lập trình viên dễ dàng nắm bắt và triển khai các tính năng. - Linh hoạt: ExpressJS không áp đặt một cấu trúc cụ thể, cho phép lập trình viên tự do tùy chỉnh và xây dựng ứng dụng theo ý muốn. - Hiệu suất cao: ExpressJS được xây dựng trên Node.js, nền tảng có hiệu suất cao, cho phép xử lý nhanh chóng các yêu cầu web đồng thời và có khả năng mở rộng tốt - Hỗ trợ định tuyến và middleware: ExpressJS giúp việc xây dựng các thành phần định tuyến ít tốn thời gian nhưng lại hiệu quả và đơn giản hơn, cung cấp hệ thống middleware mạnh mẽ, cho phép thực hiện các chức năng như xác thực, ghi log, nén dữ liệu và xử lý lỗi một cách linh hoạt và dễ dàng. Nhược điểm: - Thiếu cấu trúc: Do ExpressJS không áp đặt một cấu trúc nghiêm ngặt, việc tổ chức dự án và quản lý mã nguồn trở nên khó khăn, đặc biệt với dự án lớn và phức tạp.
- Khả năng mở rộng: Khi ứng dụng phát triển lớn và phức tạp, việc quản lý mã nguồn và mở rộng có thể trở nên khó khăn với ExpressJS. Cần có sự kiểm soát cẩn thận để tránh sự phức tạp và rối rắm trong việc quản lý các module và tương tác giữa chúng d. Ứng dụng trong để tài Các chức năng của ExpressJS được sử dụng trong đề tài: - Cấu hình các lớp trung gian để trả về các HTTP request. - Cho phép sử dụng với các hành động khác nhau dựa trên các phương thức HTTP và URL bằng define router.
- Trả về các trang HTML dựa vào các tham số. Giới thiệu ReactJS React (còn được gọi là Reactjs hay React.js) là một Thư viện javascript được tạo ra bởi sự cộng tác giữa Facebook và Instagram. Nó cho phép những nhà phát triển web tạo ra giao diện người dùng nhanh chóng. 11 Phần Views của Reactjs thường được hiển thị bằng việc chủ yếu dung các component mà chứa các component cụ thể hoặc các thẻ HTML.
Một trong những đặc trưng duy nhất của Reactjs là việc render dữ liệu không những có thể thực hiện ở tầng server mà còn ở tầng client. Lịch sử phát triển ReactJS được hiểu là một thư viện trong đó có chứa nhiều JavaScript mã nguồn mở. Mục đích của việc tạo ReactJS là tạo ra các ứng dụng web nhanh, hiệu quả và viết ít code. Năm 2011, Jordan Walke, một nhân viên của Facebook, phát triển ReactJS ban đầu để giải quyết các vấn đề về hiệu suất và khả năng mở rộng trong việc xây dựng giao diện người dùng phức tạp của Facebook.
Năm 2013, ReactJS được công bố công khai lần đầu tiên tại hội nghị F8 của Facebook. Nó ban đầu được giới thiệu là một "thư viện giao diện người dùng" và nhanh chóng thu hút sự quan tâm của cộng đồng phát triển web. Năm 2015, ReactJS trở thành mã nguồn mở hoàn toàn, cho phép các nhà phát triển khác cùng đóng góp phát triển và cải tiến ReactJS. Điều này tạo sự tăng trưởng nhanh chóng của cộng đồng React và sự phát triển của các tính năng và công cụ xung quanh nó.
Năm 2016, React Native, một framework cho phép xây dựng ứng dụng di động đa nền tảng bằng ReactJS, được giới thiệu. Điều này giúp mở rộng phạm vi ứng dụng của ReactJS từ web sang các nền tảng di động. Từ năm 2016 đến nay, ReactJS tiếp tục phát triển và trở thành một trong những công nghệ phát triển giao diện người dùng phổ biến nhất. Nó đã trở thành một phần của nhiều dự án lớn và được sử dụng bởi nhiều công ty công nghệ hàng đầu trên thế giới.
Ưu và nhược điểm Ưu điểm: - Dễ sử dụng: Thư viện react chỉ tập trung vào việc tạo ra UI hiệu quả và được phân loại thành kiểu “V” trong mô hình MVC (Model-View-Controller). - Component-Based: React sử dụng mô hình component, giúp tạo ra mã nguồn dễ hiểu, tái sử dụng và bảo trì. Components có thể được tái sử dụng ở nhiều nơi trong ứng dụng hoặc giữa các dự án khác nhau. 12 - Hiệu suất cao: React sử dụng Virtual DOM để tối ưu hóa hiệu suất bằng cách cập nhật chỉ các phần tử có thay đổi, không cần phải làm mới toàn bộ DOM.
Điều này giúp giảm độ trễ và tăng tốc quá trình render. Nhược điểm: - ReactJS chỉ phục vụ cho tầng View do chỉ là View Library (không phải MVC framework). Đo dó React sẽ không có phần Model và Controller, 2-way binding hay là Ajax. - Poor Document: Đó là một nhược điểm khá phổ biến đối với các công nghệ cập nhật liên tục.
Các công nghệ cập nhật và tăng tốc nhanh đến mức không có thời gian để tạo tài liệu phù hợp. Để khắc phục điều này, các nhà phát triển tự viết hướng dẫn với việc phát triển các bản phát hành và công cụ mới trong các dự án hiện tại. - Khó tiếp cận cho người mới học. Ứng dụng trong đề tài - ReactJS kết hợp với Redux để tạo nên front end.
- Redux: Là một thành phần quan trọng trong react, được dùng để quản lí các state. NoSQL là gì? NoSQL là một thuật ngữ viết tắt của "Not Only SQL" (không chỉ SQL) và thường được sử dụng để chỉ các loại hệ quản trị cơ sở dữ liệu không phụ thuộc vào mô hình quan hệ SQL truyền thống. NoSQL là một phương pháp lưu trữ và truy xuất dữ liệu phổ biến trong các ứng dụng web và hệ thống có yêu cầu lưu trữ lớn và khả năng mở rộng cao. Trong khi hệ thống SQL truyền thống sử dụng các bảng, hàng và cột để lưu trữ dữ liệu theo mô hình quan hệ, NoSQL sử dụng các cơ chế lưu trữ dữ liệu không có cấu trúc hoặc cấu trúc linh hoạt hơn.
Các hệ thống NoSQL thường dựa trên các mô hình dữ liệu như key- value, document, columnar hoặc graph. MongoDB MongoDB là một hệ quản trị cơ sở dữ liệu phi quan hệ (NoSQL) phổ biến. Nó được phát triển bởi công ty MongoDB Inc. và là một phần của họ các công nghệ cơ sở dữ liệu NoSQL.
MongoDB được thiết kế để lưu trữ và xử lý các tài liệu theo mô hình cơ sở dữ liệu tài liệu (document database). Một tài liệu trong MongoDB là một bản ghi dưới dạng JSON-like (JavaScript Object Notation), được gọi là BSON (Binary JSON). Tài liệu này có thể chứa các trường và giá trị khác nhau, cho phép linh hoạt trong việc lưu trữ dữ liệu không đồng nhất. Điều này rất hữu ích trong các ứng dụng web và di động, nơi cấu trúc dữ liệu có thể thay đổi linh hoạt theo thời gian.