Bối cảnh và vấn đề nghiên cứu

Trong bối cảnh công nghệ thông tin phát triển nhanh chóng, điện thoại thông minh đã trở thành thiết bị phổ biến và lập trình ứng dụng di động trở thành một xu hướng công nghệ chủ đạo. Theo số liệu thống kê từ IDC và Statcounter vào năm 2019, nền tảng Android tiếp tục giữ vị trí dẫn đầu về thị phần hệ điều hành di động toàn cầu, xếp trên các nền tảng như iOS, KaiOS, Windows Phone và BlackBerry. Nhờ đặc tính mã nguồn mở, khả năng tùy biến linh hoạt cùng kho ứng dụng phong phú, Android là môi trường thuận lợi để phát triển và phân phối phần mềm đến số lượng lớn người dùng.

Dựa trên khảo sát thị trường hệ điều hành di động, tác giả đã tiến hành so sánh ưu điểm và nhược điểm của các nền tảng chính:

Hệ điều hành Ưu điểm Nhược điểm
Android - Kho ứng dụng đồ sộ.
- Nhiều tính năng thông minh và hữu ích.
- Khả năng tùy biến cao, dễ sử dụng.
- Tính bảo mật chưa cao bằng iOS.
- Khả năng dọn dẹp rác còn hạn chế.
iOS - Tính bảo mật cao.
- Khả năng tối ưu hóa tốt, hoạt động ổn định.
- Kho ứng dụng đồ sộ, cập nhật nhanh.
- Khả năng tùy biến chưa cao.
- Việc trao đổi dữ liệu khó khăn, bất tiện.
Windows Phone - Khả năng đồng bộ, liên kết sử dụng tài khoản dịch vụ Windows tốt.
- Giao diện mượt mà, ổn định.
- Giao diện chỉ gồm các ô vuông, không thay đổi được launcher.
- Kho ứng dụng nghèo nàn so với Android và iOS.

Xuất phát từ thực tiễn trên, đề tài "Xây dựng và triển khai ứng dụng NVH News (Ứng dụng đọc báo trên điện thoại) trên nền tảng Android" được lựa chọn thực hiện nhằm giải quyết các mục tiêu và nhiệm vụ cụ thể:

  1. Mục tiêu nghiên cứu:
    • Hệ thống hóa cơ sở lý luận về nền tảng JavaScript và môi trường máy chủ Node.js đã được tích lũy trong chương trình đào tạo đại học.
    • Đánh giá ưu điểm và nhược điểm của Node.js so với các công nghệ truyền thống như PHP, ASP.NET, từ đó đúc kết kinh nghiệm lựa chọn giải pháp công nghệ phù hợp với yêu cầu xây dựng ứng dụng web và dịch vụ máy chủ.
  2. Nhiệm vụ nghiên cứu:
    • Nghiên cứu quy trình thiết kế giao diện, xử lý logic máy chủ, xây dựng hệ thống API RESTful và cơ chế render template.
    • Xây dựng hoàn chỉnh ứng dụng mẫu (Android Apps Demo) phục vụ nhu cầu đọc tin tức (NVH News).
  3. Đối tượng và phạm vi nghiên cứu:
    • Đối tượng nghiên cứu: Công nghệ Node.js, framework Express.js, template engine Handlebars, framework React Native và quy trình triển khai ứng dụng di động.
    • Thời gian thực hiện: Nghiên cứu được triển khai trong thời gian 02 tháng, từ ngày 21/09/2020 đến ngày 21/11/2020.
    • Địa điểm thực hiện: Khoa Công nghệ Thông tin, Trường Đại học Giao thông Vận tải TP. Hồ Chí Minh.

Cơ sở lý thuyết và phương pháp

Khung lý thuyết và công nghệ nền tảng

Báo cáo dựa trên nền tảng kiến trúc phần mềm hướng sự kiện (event-driven) và mô hình I/O không chặn (non-blocking I/O) của Node.js:

  • Node.js và V8 Engine: Sử dụng bộ máy thực thi V8 của Google để biên dịch trực tiếp mã JavaScript sang mã máy, tích hợp sẵn thư viện máy chủ HTTP cho phép vận hành ứng dụng độc lập mà không bắt buộc dùng các phần mềm trung gian như Apache HTTP Server, Nginx hay IIS.
  • Tiến trình chuẩn hóa ECMAScript: Lược sử phát triển từ ECMAScript 1, ES3, ES5 (phát hành tháng 12/2009 với Strict Mode, JSON, Object/Array methods) đến ECMAScript 6 (ES2015) với 10 tính năng cốt lõi: Default Parameters, Template Literals, Multi-line String, Destructuring Assignment, Enhanced Object Literals, Arrow Functions, Promises, Block-Scoped (let/const), Classes và Modules.
  • Hệ sinh thái Module và Package: Kiến trúc quản lý gói NPM (Node Package Manager), các thư viện phụ trợ như Express.js, Handlebars.js, Connect, Socket.io, Mongo/Mongojs, Redis, Underscore/Lodash, Forever.
  • Framework phát triển ứng dụng di động: React Native hỗ trợ xây dựng giao diện người dùng đa nền tảng dựa trên JavaScript.

Phương pháp nghiên cứu

Tác giả kết hợp các phương pháp nghiên cứu kỹ thuật phần mềm bao gồm:

  • Phương pháp thu thập và phân tích tài liệu: Đọc, tổng hợp và hệ thống hóa tài liệu từ sách báo khoa học chuyên ngành, tài liệu đặc tả kỹ thuật trực tuyến của Node.js và các thư viện liên quan.
  • Phương pháp thực nghiệm - mô hình hóa phần mềm: Thực hành lập trình trên môi trường Visual Studio Code, triển khai các mô-đun đọc/ghi tệp, xây dựng bảng định tuyến (routing), xử lý chuỗi mẫu và cấu hình API endpoints.
  • Phương pháp kiểm thử phần mềm: Sử dụng công cụ Postman và tính năng Postman Collection Runner để gửi các HTTP request (GET, POST, DELETE) nhằm xác thực tính đúng đắn của dữ liệu trả về theo định dạng JSON.

Nguồn dữ liệu

  • Dữ liệu cấu hình và gói phụ thuộc từ tệp package.json.
  • Dữ liệu người dùng và nội dung phục vụ thử nghiệm được lưu trữ có cấu trúc trong tệp users.json.
  • Các nguồn tài liệu tham khảo chính thống về chuẩn ECMAScript và tài liệu hướng dẫn phát triển của Node.js, Express và React Native.

Thiết kế và triển khai

Hệ thống được thiết kế theo kiến trúc phân tầng, tách biệt giữa tầng dịch vụ Backend (Node.js/Express.js) và tầng ứng dụng Frontend/Mobile (Handlebars/React Native).

1. Phân tích tác nhân và chức năng hệ thống

Hệ thống xác định danh sách các Actor và Use-case phục vụ việc quản lý và xem tin tức:

  • Danh sách Actor: Khách vãng lai (Guest), Thành viên đã đăng ký (Member), Quản trị viên hệ thống (Admin).
  • Danh sách Use-case chính:
    • Nhóm người dùng: Đăng ký tài khoản, Đăng nhập, Xem thông tin profile, Xem danh sách tin tức trang chủ, Xem chi tiết bài viết, Liên hệ ban quản trị.
    • Nhóm tác vụ thành viên: Quản lý bài viết cá nhân (tạo, chỉnh sửa, gửi duyệt bài).
    • Nhóm tác vụ quản trị (Admin): Quản trị danh mục tin tức, duyệt bài viết, quản lý tài khoản người dùng và giám sát hệ thống.

2. Thiết kế API RESTful và xử lý định tuyến

Các API được thiết kế theo đúng chuẩn RESTful, sử dụng danh từ làm định danh tài nguyên và ánh xạ trực tiếp vào các phương thức HTTP:

STT Tên chức năng Phương thức HTTP Cấu trúc URI Dữ liệu Body Kết quả thực thi
1 listUsers GET /listUsers hoặc /user Trống Trả về danh sách toàn bộ người dùng
2 addUser POST /addUser hoặc /user JSON String Thêm một bản ghi người dùng mới
3 deleteUser DELETE /deleteUser hoặc /user/:id JSON String / ID Xóa thông tin một người dùng
4 Chi tiết User GET /:id hoặc /user/:id Trống Trả về thông tin chi tiết của user theo ID

3. Cơ chế xử lý tệp tin và kiểm soát I/O

Tầng Backend sử dụng mô-đun fs để thực hiện thao tác tệp tin. Các hoạt động mở tệp sử dụng các cờ (flags) định sẵn:

Ký hiệu Flag Ý nghĩa và hành vi hoạt động
r Mở tệp để đọc. Xuất hiện Exception nếu tệp không tồn tại.
r+ Mở tệp để đọc và ghi. Xuất hiện Exception nếu tệp không tồn tại.
rs / rs+ Mở tệp để đọc (hoặc đọc và ghi) trong chế độ đồng bộ với hệ điều hành.
w Mở tệp để ghi. Tự động tạo mới nếu tệp chưa tồn tại.
wx Tương tự w nhưng thao tác thất bại nếu tệp đã tồn tại sẵn.
w+ / wx+ Mở tệp để đọc và ghi (kèm điều kiện tạo mới hoặc kiểm tra tồn tại).
a / a+ Mở tệp để ghi tiếp (append) vào cuối tệp. Tự động tạo tệp nếu chưa có.
ax / ax+ Tương tự a/a+ nhưng thao tác thất bại nếu tệp đã tồn tại.

Để kiểm tra trạng thái và phân loại đối tượng tệp, hệ thống sử dụng các phương thức của đối tượng fs.Stats:

  • stats.isFile(): Trả về true nếu đối tượng là tệp tin thông thường.
  • stats.isDirectory(): Trả về true nếu đối tượng là thư mục.
  • stats.isBlockDevice(): Trả về true nếu là thiết bị khối (Block Device).
  • stats.isCharacterDevice(): Trả về true nếu là thiết bị ký tự (Character Device).
  • stats.isSymbolicLink(): Trả về true nếu là liên kết tượng trưng (Symbolic Link).
  • stats.isFIFO(): Trả về true nếu là đường ống dữ liệu FIFO.
  • stats.isSocket(): Trả về true nếu là kết nối Socket.

4. Kiểm thử hệ thống

  • Kiểm thử bất đồng bộ (Non-blocking vs Blocking): Tiến hành so sánh tập tin blocking-example.js (sử dụng readFileSync) và non-blocking-example.js (sử dụng readFile kết hợp callback). Kết quả thực nghiệm xác nhận phương thức bất đồng bộ không làm nghẽn luồng chính, giúp các câu lệnh kế tiếp được thực thi ngay lập tức trong khi tác vụ I/O chạy ngầm.
  • Kiểm thử API Endpoint: Thực thi toàn bộ danh sách kiểm thử trên công cụ Postman và Postman Collection Runner, ghi nhận mã phản hồi HTTP 200 OK và cấu trúc dữ liệu JSON trả về đầy đủ.

Nội dung chính theo từng chương

Chương 1: Giới thiệu về NodeJS

Chương này tổng quan về môi trường chạy Node.js và nền tảng ngôn ngữ JavaScript:

  • Phân tích bản chất Node.js là mã nguồn mở, vận hành trên bộ máy Google V8 JavaScript Engine, hỗ trợ kiến trúc hướng sự kiện và non-blocking I/O API giúp tối ưu hóa thông lượng và khả năng mở rộng.
  • Nêu rõ các lĩnh vực ứng dụng điển hình: phát triển ứng dụng thời gian thực (Real-time như chat, mạng xã hội), ứng dụng trang đơn (Single Page Application - SPA tương tác nhiều qua AJAX), ứng dụng kết nối cơ sở dữ liệu NoSQL (MongoDB, CouchDB) và các công cụ dòng lệnh (CLI).
  • Giới thiệu hệ sinh thái NPM với các gói phổ biến: Express, Connect, Jade, Mongo/Mongojs, Redis, CoffeeScript, Underscore, Forever.
  • Hướng dẫn quy trình thiết lập Node.js trên các hệ điều hành (Windows, Linux, macOS, SunOS) và cấu hình biến môi trường PATH.
  • Trình bày các khái niệm nền tảng trong JavaScript: phạm vi biến (Scope gồm Global scope và Local scope), vòng đời của biến, cơ chế gọi hàm AJAX kết hợp Callback.
  • Hệ thống hóa 10 tính năng mới của ES6-7 và phân tích các mốc phát triển ECMAScript (từ ES1, ES2, ES3, sự loại bỏ ES4, bước thỏa hiệp ES5 năm 2009 cho đến chuẩn hóa ES6/ECMAScript 2015).
  • Đánh giá các công cụ phát triển: WebStorm (JetBrains), Sublime Text, Atom và Visual Studio Code (Microsoft).

Chương 2: Ứng dụng của NodeJS

Chương 2 đi sâu vào các chức năng kỹ thuật và thao tác thực thi cốt lõi trong Node.js:

  • Hướng dẫn tạo máy chủ HTTP đơn giản bằng tập tin server.js thông qua cổng mặc định và chạy trên terminal/command line.
  • Phân tích cơ chế quản lý gói của NPM: quản lý phụ thuộc qua package.json, cài đặt cục bộ (local trong node_modules) và toàn cục (global với cờ -g), quy trình tạo mô-đun (npm init), đăng ký tài khoản (npm adduser) và xuất bản (npm publish).
  • Trình bày hệ thống mô-đun tích hợp và hướng dẫn xây dựng mô-đun tùy biến sử dụng từ khóa exports cùng hàm nạp require().
  • Tổng hợp các mô-đun cốt lõi quan trọng:
Tên Core Module Chức năng mô tả
http Chứa các lớp, phương thức và sự kiện để tạo máy chủ HTTP.
url Cung cấp phương thức phân tích cú pháp và xử lý chuỗi URL.
querystring Xử lý các chuỗi truy vấn (query string).
path Xử lý và chuẩn hóa các đường dẫn tệp tin và thư mục.
fs Chứa các lớp, phương thức và sự kiện để thao tác I/O với tệp tin.
util Cung cấp các hàm tiện ích hỗ trợ lập trình viên.
  • Hướng dẫn chi tiết kỹ thuật xử lý tệp tin qua mô-đun fs: mở tệp (open), lấy thông tin (stat), ghi dữ liệu (writeFile), đọc dữ liệu qua File Descriptor (read), đóng tệp (close), cắt tệp (ftruncate), xóa tệp (unlink), tạo thư mục (mkdir), đọc thư mục (readdir) và xóa thư mục (rmdir).
  • Giải thích nguyên lý Callback, phân tích cơ chế Non-blocking I/O và đối chiếu với Blocking I/O thông qua các ví dụ thực thi mã nguồn cụ thể.

Chương 3: Template Engine Handlebars

Chương 3 trình bày về công cụ tạo khuôn mẫu HTML không chứa logic (logic-less template engine):

  • Định nghĩa Handlebars.js là trình biên dịch viết bằng JavaScript, có chức năng nhận biểu thức HTML/Handlebars và biên dịch thành hàm JavaScript nhận đối tượng dữ liệu (context) để trả về chuỗi HTML hoàn chỉnh.
  • Chỉ ra các trường hợp ứng dụng: sử dụng cùng JavaScript front-end framework, các ứng dụng có view cập nhật liên tục từ API REST hoặc dữ liệu máy khách, hệ thống có lưu lượng truy cập lớn cần quản lý giao diện sạch sẽ.
  • Hướng dẫn cú pháp biểu thức {{ content }}, khối lặp danh sách {{#each}}...{{/each}} hoặc {{#customers}}...{{/customers}}.
  • Trình bày quy trình biên dịch 2 bước: gọi Handlebars.compile() để tạo hàm thực thi và truyền dữ liệu đối tượng vào hàm để render chuỗi mã HTML chèn vào trang web.

Chương 4: Express.js và API

Chương 4 tập trung vào việc ứng dụng framework Express.js để xây dựng máy chủ và các dịch vụ Web API:

  • Giới thiệu các đặc tính cơ bản của Express: thiết lập middleware xử lý request, định nghĩa bảng định tuyến (routing table) dựa trên URL và phương thức HTTP, hỗ trợ render view template.
  • Hướng dẫn cài đặt Express và các module trung gian quan trọng: body-parser (xử lý JSON, raw data, text và urlencoded), cookie-parser (xử lý cookie header), multer (xử lý multipart/form-data).
  • Kỹ thuật render phản hồi HTML bằng chuỗi mẫu thông qua app.js.
  • Triển khai chi tiết các điểm cuối API RESTful quản lý người dùng với dữ liệu nguồn users.json (các hàm liệt kê listUsers, thêm mới addUser, xóa deleteUser và lấy chi tiết theo :id).
  • Hướng dẫn kết nối và kiểm tra API tự động bằng phần mềm Postman.

Chương 5: React-Native

Chương 5 giới thiệu về công nghệ lập trình ứng dụng di động:

  • Giới thiệu tổng quan về framework React Native, cơ chế sử dụng JavaScript để xây dựng giao diện ứng dụng di động gốc (native mobile apps).
  • Hướng dẫn các bước thiết lập môi trường phát triển React Native phục vụ việc xây dựng client trên hệ điều hành Android.

Chương 6: Xây dựng App Demo

Chương 6 mô tả chi tiết quá trình hiện thực hóa ứng dụng đọc tin tức NVH News:

  • Giới thiệu tổng quan về ứng dụng demo App Tin Tức.
  • Liệt kê các nền tảng và công cụ phát triển phần mềm được sử dụng.
  • Phân tích và thiết kế hệ thống: mô tả yêu cầu bài toán, xây dựng danh sách các Actor, lập bảng các Use-case và vẽ sơ đồ Use-case tổng thể.
  • Đặc tả chi tiết giao diện và quy trình xử lý của các chức năng chính: Trang chủ, Trang đăng ký thành viên, Trang đăng nhập, Trang liên hệ, Trang xem chi tiết bài viết, Trang thông tin profile cá nhân, Trang quản trị dành cho Admin, Trang quản lý bài viết của thành viên.

Chương 7: Kiểm thử và vận hành

Chương 7 tổng kết công tác đánh giá hệ thống và định hướng phát triển:

  • Báo cáo kết quả kiểm thử chức năng và kết quả chạy kiểm tra API bằng Postman collection runner.
  • Đánh giá mức độ hoàn thành so với mục tiêu ban đầu của đề tài thực tập tốt nghiệp.
  • Đề xuất các hướng phát triển, hoàn thiện và nâng cấp ứng dụng trong tương lai.

Kết quả và đóng góp

1. Kết quả chính đạt được

  • Hoàn thành báo cáo nghiên cứu và làm chủ các kiến thức chuyên sâu về môi trường Node.js, kỹ thuật lập trình bất đồng bộ (Non-blocking Callback), cơ chế quản lý tệp tin và kiến trúc mô-đun qua NPM.
  • Xây dựng thành công hệ thống máy chủ dịch vụ bằng Express.js, cung cấp đầy đủ các điểm cuối API RESTful chuẩn hóa định dạng dữ liệu trao đổi bằng JSON.
  • Ứng dụng thành công template engine Handlebars.js để tách biệt logic xử lý và tầng hiển thị HTML.
  • Hiện thực hóa ứng dụng đọc báo demo NVH News trên nền tảng Android, tích hợp đầy đủ các phân hệ chức năng cho 3 nhóm tác nhân (Khách, Thành viên, Quản trị viên).
  • Đạt kết quả kiểm thử API chính xác thông qua công cụ Postman Collection Runner.

2. Giải pháp và kiến nghị

  • Khuyến nghị sử dụng Visual Studio Code làm môi trường phát triển tích hợp (IDE/Editor) chuẩn cho các dự án phát triển Node.js do tính gọn nhẹ, miễn phí và hỗ trợ nhiều tiện ích mở rộng.
  • Đề xuất mô hình thiết kế API sử dụng danh từ làm định danh tài nguyên (resource identifiers) kết hợp các phương thức chuẩn HTTP (GET, POST, PUT, PATCH, DELETE) để tối ưu hóa tính tường minh và khả năng mở rộng của hệ thống.

3. Đóng góp của đề tài

  • Tổng hợp tài liệu hướng dẫn kỹ thuật có hệ thống từ cài đặt, cấu hình, xử lý tệp, xây dựng API đến kết nối ứng dụng di động.
  • Đưa ra các ví dụ thực nghiệm đối chiếu trực quan giữa cơ chế đồng bộ (blocking) và bất đồng bộ (non-blocking), giúp làm rõ ưu thế xử lý I/O hiệu năng cao của Node.js.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế

  • Thời gian nghiên cứu giới hạn trong phạm vi 02 tháng (từ 21/09/2020 đến 21/11/2020).
  • Hệ thống dữ liệu thử nghiệm trong các bài toán API RESTful ở giai đoạn đầu vẫn lưu trữ trên tệp JSON cục bộ (users.json) thay vì triển khai trên hệ quản trị cơ sở dữ liệu chuyên dụng hoàn chỉnh.

Hướng nghiên cứu tiếp

  • Mở rộng kết nối và lưu trữ dữ liệu sang các hệ quản trị cơ sở dữ liệu NoSQL chuyên sâu như MongoDB hoặc CouchDB như đã định hướng ở phần hệ sinh thái Node.js.
  • Hoàn thiện việc đóng gói và triển khai phát hành chính thức ứng dụng Android lên chợ ứng dụng Google Play Store theo đúng định hướng tiêu đề báo cáo.
  • Nâng cao tính bảo mật của hệ thống và bổ sung các cơ chế xác thực phiên làm việc nâng cao cho các API endpoints.

Giá trị tham khảo

Báo cáo là tài liệu tham khảo hữu ích cho sinh viên ngành Công nghệ thông tin, Kỹ thuật phần mềm và các lập trình viên mới tiếp cận lộ trình Full-stack JavaScript:

  • Phần xử lý I/O và tệp tin (Chương 2): Cung cấp bảng tra cứu toàn diện về các cờ (flags) mở tệp và các phương thức kiểm tra trạng thái tệp của lớp fs.Stats.
  • Phần thiết kế RESTful API (Chương 4): Cung cấp tài liệu mẫu về cấu trúc thiết kế bảng định tuyến API chuẩn hóa bằng Express.js kèm quy trình kiểm thử với Postman.
  • Phần phân tích thiết kế ứng dụng (Chương 6): Cung cấp quy trình đặc tả Use-case và phân chia vai trò Actor rõ ràng cho một ứng dụng đọc tin tức đa tầng.

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

1. Báo cáo thực tập tốt nghiệp này do ai thực hiện và thuộc đơn vị đào tạo nào?
Báo cáo được thực hiện bởi hai sinh viên Nguyễn Văn Hảo (MSSV: 1551120082) và Nguyễn Xuân Trường (MSSV: 1551120124), dưới sự hướng dẫn của Giảng viên Lê Quốc Tuấn, thuộc Khoa Công nghệ Thông tin, Trường Đại học Giao thông Vận tải TP. Hồ Chí Minh (hoàn thành ngày 24/11/2020).

2. Sự khác biệt căn bản giữa phương thức đọc tệp readFileSyncreadFile trong Node.js là gì?
readFileSync là phương thức đọc tệp đồng bộ (Blocking), khiến chương trình phải dừng lại và chặn các dòng mã kế tiếp cho đến khi tệp được đọc xong. Ngược lại, readFile là phương thức đọc bất đồng bộ (Non-blocking), không làm gián đoạn luồng thực thi chính và sẽ tự động gọi đến một hàm Callback sau khi hoàn tất tác vụ đọc tệp.

3. Express framework trong đồ án sử dụng các module trung gian (middleware) nào để xử lý dữ liệu?
Đồ án giới thiệu 3 module trung gian quan trọng cài đặt cùng Express: body-parser (xử lý dữ liệu dạng JSON, text, raw data và URL-encoded), cookie-parser (phân tích header của cookie) và multer (xử lý dữ liệu biểu mẫu multipart/form-data).

4. Handlebars.js đóng vai trò gì trong kiến trúc ứng dụng?
Handlebars.js là một template engine không chứa logic (logic-less), có chức năng biên dịch các biểu thức HTML/Handlebars thành hàm JavaScript. Hàm này nhận đối tượng dữ liệu đầu vào và sinh ra chuỗi mã HTML tương ứng, giúp tách biệt mã hiển thị giao diện khỏi các tệp JavaScript chứa logic xử lý.

5. Các điểm cuối API RESTful quản lý người dùng trong đồ án được thiết kế như thế nào?
Hệ thống thiết kế 4 endpoint chính: GET /listUsers (lấy danh sách toàn bộ người dùng), POST /addUser (thêm người dùng mới qua chuỗi JSON), DELETE /deleteUser (xóa người dùng hiện tại) và GET /:id (hiển thị thông tin chi tiết của một người dùng theo ID).


Kết luận

Báo cáo thực tập tốt nghiệp "Tìm hiểu và triển khai Android Apps trên Google Play" của nhóm sinh viên Trường Đại học Giao thông Vận tải TP. Hồ Chí Minh đã hệ thống hóa toàn diện kiến thức về nền tảng JavaScript, môi trường Node.js và framework Express.js. Công trình đã hiện thực hóa thành công mô hình máy chủ API RESTful kết hợp template Handlebars và xây dựng ứng dụng đọc tin tức NVH News trên nền tảng di động Android. Toàn bộ quy trình từ phân tích Use-case, thiết kế định tuyến, xử lý tệp tin đến kiểm thử tự động với Postman đều được trình bày rõ ràng, đáp ứng đầy đủ các yêu cầu chuyên môn của một đồ án thực tập tốt nghiệp ngành Công nghệ thông tin.