Tìm hiểu Modules, Packages và Built-in Modules trong Node.js
- 21-04-2026
- Toanngo92
- 0 Comments
Dưới đây là bản nội dung đã được biên soạn lại từ 2 slide Session 3: Modules and Packages in Node.js và Session 4: Built-in Modules để anh/chị có thể dùng làm bài viết đăng web. Nội dung được viết theo hướng dễ đọc, phù hợp bài chia sẻ kiến thức cho người mới học Node.js.
Tiêu đề gợi ý:
Tìm hiểu Modules, Packages và Built-in Modules trong Node.js
Mô tả ngắn:
Node.js là nền tảng mạnh mẽ cho phát triển ứng dụng phía máy chủ. Để làm việc hiệu quả với Node.js, người học cần hiểu rõ module, package, framework và các built-in module như http, url, events, os, path… Đây là những thành phần cốt lõi giúp xây dựng ứng dụng web, xử lý tệp, quản lý URL và phát triển các hệ thống hướng sự kiện.
Mục lục
Tìm hiểu Modules, Packages và Built-in Modules trong Node.js
Khi bắt đầu học Node.js, một trong những kiến thức nền tảng quan trọng nhất là hiểu cách tổ chức mã nguồn bằng module và package, đồng thời biết cách tận dụng các built-in modules có sẵn để xây dựng ứng dụng nhanh hơn. Đây là các khái niệm cốt lõi giúp lập trình viên phát triển ứng dụng phía máy chủ một cách có cấu trúc, dễ mở rộng và dễ tái sử dụng.
1. Module trong Node.js là gì?
Trong Node.js, module có thể hiểu là một tập hợp các hàm hoặc đoạn mã được đóng gói lại để phục vụ cho một nhiệm vụ cụ thể. Module giúp chia nhỏ chương trình thành nhiều phần rõ ràng hơn, dễ quản lý hơn và có thể tái sử dụng trong nhiều tệp khác nhau. Slide Session 3 cho thấy module có 3 đặc điểm nổi bật: chúng giống như một nhóm chức năng được gom lại với nhau, cần được import vào mã nguồn để sử dụng, và có thể được tái sử dụng trong nhiều tệp chương trình Node.js khác nhau.
Một ưu điểm rất lớn của module là giúp dự án tránh tình trạng viết mọi thứ trong một file duy nhất. Thay vì để toàn bộ logic trong một nơi, lập trình viên có thể tách riêng xử lý file, xử lý mạng, xử lý dữ liệu hoặc các tác vụ tiện ích thành từng module riêng biệt. Điều này giúp code sạch hơn, dễ bảo trì hơn và hỗ trợ làm việc nhóm hiệu quả hơn.
2. Các loại module trong Node.js
Theo nội dung trong slide, Node.js có 3 loại module chính:
Core Modules
Đây là các module được tích hợp sẵn khi cài đặt Node.js. Người dùng không cần tải thêm mà chỉ cần import là có thể sử dụng. Một số core module quen thuộc được nhắc đến trong bài học là os, http, fs, path, url và events.
Local Modules
Đây là các module do chính lập trình viên tạo ra trong dự án của mình. Local module thường chứa các hàm xử lý nghiệp vụ riêng và có thể được tái sử dụng giữa các phần của cùng một ứng dụng. Slide cũng nhấn mạnh rằng các module này có thể được phân phối qua dự án bằng Node Package Manager nếu cần.
Third-party Modules
Đây là các module được bên thứ ba phát triển và chia sẻ trực tuyến để các ứng dụng khác có thể sử dụng. Chúng thường được cài đặt thông qua NPM và giúp tiết kiệm rất nhiều thời gian phát triển nhờ tận dụng sẵn thư viện có sẵn thay vì viết lại từ đầu.
3. Cách import module trong Node.js
var module_name = require('module_name');
Ở đây, biến bên trái là nơi lưu instance của module được import, còn chuỗi bên trong require() là tên module cần sử dụng, ví dụ như os, http hay fs. Đây là bước đầu tiên để dùng được các chức năng do module cung cấp.
Ví dụ minh họa:
const os = require('os');
console.log(os.platform());
Đoạn mã trên cho thấy cách import module os để lấy thông tin nền tảng hệ điều hành.
4. Làm việc với module xử lý file
Các phương thức làm việc với file phổ biến là fs.open, fs.writeFile, fs.appendFile, fs.readFile, fs.unlink và fs.rmdir.
Điều này cho thấy Node.js không chỉ phù hợp để xây dựng web server mà còn rất mạnh ở khả năng thao tác với hệ thống file. Chẳng hạn, khi xây dựng một ứng dụng lưu log, upload tài liệu hoặc xử lý dữ liệu đầu vào từ file, các module dạng này đóng vai trò rất quan trọng.
Ví dụ:
const fs = require('fs');
fs.writeFile('hello.txt', 'Xin chào Node.js', function(err) {
if (err) throw err;
console.log('Đã ghi file thành công');
});
5. Package trong Node.js là gì?
ackage là một container của modules, tức là một gói chứa một hoặc nhiều module liên quan với nhau, được gom lại thành một đơn vị thống nhất và có thể được import vào ứng dụng bằng hàm require.
Nói cách khác, nếu module là một “khối chức năng”, thì package là một “gói hoàn chỉnh” có thể bao gồm nhiều khối chức năng khác nhau. Package giúp chia sẻ mã nguồn dễ dàng hơn, chuẩn hóa việc cài đặt và quản lý phiên bản trong dự án Node.js.
6. Sử dụng NPM để quản lý package
Slide cũng giới thiệu các lệnh cơ bản khi làm việc với package qua NPM:
npm install <package_name>để cài đặt cục bộnpm install -g <package_name>để cài đặt toàn cụcnpm uninstall <package_name>để gỡ cài đặtnpm update <package_name>để cập nhật package
Đây là các thao tác cơ bản mà hầu như bất kỳ dự án Node.js nào cũng sử dụng. Nhờ NPM, lập trình viên có thể nhanh chóng thêm thư viện vào dự án, cập nhật phiên bản mới hoặc loại bỏ những package không còn cần thiết.
7. Web Framework trong Node.js
eb framework là tập hợp các thư viện hoặc công cụ hỗ trợ phát triển ứng dụng web nhanh hơn. Framework giúp giảm việc viết lại các đoạn mã lặp đi lặp lại, cung cấp thư viện cho các tác vụ như truy cập cơ sở dữ liệu hay quản lý session, đồng thời có thể đóng vai trò như một khuôn mẫu để thiết kế giao diện và cấu trúc ứng dụng.
Một số framework Node.js được liệt kê trong bài học gồm có Express.js, Sails.js, Hapi.js, Meteor.js, Socket.js và Total.js. Đây là các lựa chọn tiêu biểu minh họa cho hệ sinh thái phong phú của Node.js trong phát triển web.
8. Các mô hình framework phổ biến
Theo phần “Types of Framework Models in Node.js”, bài học chia framework thành 3 mô hình tiêu biểu:
MVC
Mô hình Model – View – Controller giúp tách phần xử lý dữ liệu, giao diện và điều khiển luồng xử lý thành các phần riêng biệt. Slide nêu ví dụ Express.js như một framework có thể áp dụng kiểu tổ chức này.
Full Stack MVC
Mô hình này cung cấp thư viện và công cụ cho cả phía front-end lẫn back-end, phù hợp khi xây dựng ứng dụng toàn diện.
REST API
REST API là tập các quy tắc giúp client và server giao tiếp với nhau thông qua các phương thức HTTP. Đây là nền tảng rất quan trọng khi xây dựng hệ thống web service hoặc ứng dụng kết nối giữa nhiều nền tảng khác nhau.
9. Các utility functions trong Node.js
nhóm các utility functions như:
OS: tương tác với hệ điều hànhPath: xử lý đường dẫnNet: hỗ trợ các chức năng liên quan đến mạngDNS: hỗ trợ xử lý liên quan đến tên miền- ngoài ra slide còn liệt kê thêm
Domaintrong nhóm tiện ích này.
Hai module được minh họa rõ hơn là OS module và Path module. Với OS module, một số phương thức được nêu gồm os.type, os.platform và os.totalmem. Với Path module, một số phương thức quan trọng là path.join, path.parse, path.dirname và path.extname. Những công cụ này rất hữu ích khi ứng dụng cần làm việc với hệ điều hành và đường dẫn file theo cách an toàn, có tổ chức.
Ví dụ:
const path = require('path');
console.log(path.join('uploads', 'images', 'photo.png'));
console.log(path.extname('photo.png'));
10. Built-in Modules và vai trò trong Node.js
Built-in Modules là những module cốt lõi được tích hợp sẵn trong Node.js và cung cấp nhiều chức năng thiết yếu cho các tác vụ như tạo web server, làm việc với file, xử lý URL hay xây dựng hệ thống hướng sự kiện. Phần tóm tắt của slide nhấn mạnh rằng built-in modules mang lại lợi ích về hiệu năng, độ tin cậy và khả năng tương thích trong nhiều tác vụ khác nhau.
11. HTTP Module trong Node.js
Một trong những built-in module quan trọng nhất là http. Theo bài học, module này có thể được dùng để tạo HTTP server và thực hiện HTTP request. Ba lớp chính được nêu trong slide là:
http.Server: xử lý request đến và tạo response cho clienthttp.ClientRequest: định nghĩa chi tiết của một HTTP requesthttp.ServerResponse: gửi HTTP response về cho client
Ngoài ra, một số phương thức chính của http.Server bao gồm http.createServer, server.listen và server.close. Trong khi đó, http.ClientRequest có các phương thức như request.write và request.end; còn http.ServerResponse có response.write, response.end và response.writeHead.
Ví dụ tạo HTTP server đơn giản:
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello from Node.js server');
});
server.listen(3000, () => {
console.log('Server is running at http://localhost:3000');
});
12. Quy trình tạo một HTTP server đơn giản
Nội dung mô tả quy trình tạo server khá trực quan: mở trình soạn thảo mã, import HTTP module, tạo server, xử lý request, đặt định dạng response là plain text, chỉ định cổng, lưu file dưới tên servercreate.js, khởi động server và cuối cùng là kiểm tra hoạt động của nó. Quy trình này cho thấy cách Node.js cho phép lập trình viên nhanh chóng xây dựng một web server tối thiểu chỉ với vài dòng mã.
Bài học cũng minh họa thêm cách tạo HTML response cho HTTP server, tức là thay vì trả về plain text, server có thể trả về nội dung HTML để trình duyệt hiển thị như một trang web đơn giản.
13. URL Module trong Node.js
Một built-in module khác rất quan trọng là url. Theo slide, module này có 3 ứng dụng chính:
- phân tích URL thành từng thành phần
- xây dựng URL từ các thành phần
- lấy ra các thành phần cụ thể của URL
Hai phương thức tiêu biểu:
url.parse()để phân tích một chuỗi URL thành object chứa các thành phần khác nhauurl.format()để tạo lại chuỗi URL từ object URL hoặc các thành phần URL
Ví dụ:
const url = require('url');
const myUrl = 'https://www.jsonplaceholder.typicode.com/todos/61';
const parsedUrl = url.parse(myUrl, true);
console.log(parsedUrl.protocol);
console.log(parsedUrl.hostname);
console.log(parsedUrl.pathname);
14. Events Module và lập trình hướng sự kiện
Node.js nổi tiếng với mô hình bất đồng bộ và hướng sự kiện, vì vậy events là module rất quan trọng. Theo slide, module này bao gồm lớp EventEmitter, hỗ trợ tạo custom event emitter bằng cách mở rộng lớp này, đồng thời phù hợp để xây dựng nhiều loại ứng dụng như hệ thống thời gian thực, cơ chế gửi thông báo, xử lý tương tác người dùng và đăng ký các event listeners.
Một số phương thức của events module được liệt kê gồm:
on(event, listener)once(event, listener)removeListener(event, listener)emit(event[, ...args])setMaxListeners(n)
Ví dụ đơn giản:
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.on('sendNotification', () => {
console.log('Thông báo đã được gửi');
});
emitter.emit('sendNotification');
15. Kết luận
Từ hai bài học này có thể thấy rằng Node.js không chỉ là một môi trường chạy JavaScript phía máy chủ, mà còn là một hệ sinh thái có cấu trúc rất rõ ràng. Module giúp tổ chức mã nguồn thành các phần có thể tái sử dụng. Package giúp đóng gói và quản lý các module hiệu quả hơn thông qua NPM. Framework giúp tăng tốc phát triển ứng dụng web. Còn built-in modules như http, url, events, os và path cung cấp những công cụ cốt lõi để lập trình viên nhanh chóng xây dựng server, xử lý URL, làm việc với hệ điều hành và phát triển hệ thống hướng sự kiện.
Nếu nắm chắc các khái niệm này, người học sẽ có nền tảng rất tốt để tiếp tục đi sâu hơn vào Express.js, REST API, thao tác với file, kết nối cơ sở dữ liệu và xây dựng các ứng dụng backend hoàn chỉnh bằng Node.js.
Bài tập
Bộ bài tập thực hành – HTTP Server Node.js
Quy tắc chung
- Chỉ dùng Node.js built-in module
- Không dùng Express
- File chạy bằng lệnh:
node tenfile.js
- Test bằng trình duyệt hoặc Postman
- Port nên dùng:
3000
PHẦN 1 — Bài khởi động nhưng làm đầy đủ
Bài 1: Tạo HTTP server đầu tiên
Mục tiêu
Làm quen với:require('http')http.createServer()res.writeHead()res.end()server.listen()
Yêu cầu
Tạo fileserver1.js:
- Import module
http - Tạo server tại cổng
3000 - Khi truy cập
http://localhost:3000, server trả về:
Hello, this is my first HTTP server
- Status code phải là
200 - Header
Content-Typephải làtext/plain
Kết quả mong muốn
Trình duyệt hiển thị:Hello, this is my first HTTP server
Yêu cầu thêm
- Console phải in:
Server is running at http://localhost:3000
Bài 2: Trả về nội dung HTML
Mục tiêu
Luyện trả về HTML thay vì text.Yêu cầu
Tạo fileserver2.js:
- Tạo HTTP server
- Trả về nội dung HTML hoàn chỉnh:
<h1>Welcome to My Website</h1>
<p>This page is served by Node.js HTTP module</p>
- Header phải là:
'Content-Type': 'text/html'
Yêu cầu thêm
Trong HTML phải có:- 1 tiêu đề
<h1> - 1 đoạn mô tả
<p> - 1 danh sách
<ul>gồm 3 mục:- Home
- About
- Contact
Bài 3: Tách response thành nhiều phần
Mục tiêu
Luyệnres.write() và res.end().
Yêu cầu
Tạo fileserver3.js:
- Không được viết hết nội dung trong một
res.end(...) - Phải dùng ít nhất:
- 2 lần
res.write() - 1 lần
res.end()
- 2 lần
Nội dung trả về
<h1>Node.js Server</h1>
<p>Learning HTTP response step by step</p>
Câu hỏi tự kiểm tra
res.write()để làm gì?res.end()để làm gì?- Nếu quên
res.end()thì chuyện gì xảy ra?
PHẦN 2 — Route handling cơ bản
Bài 4: Tạo server nhiều route
Mục tiêu
Luyệnreq.url
Yêu cầu
Tạo fileserver-routes.js với các route sau:
| URL | Nội dung trả về |
|---|---|
/ |
Home page |
/about |
About us page |
/contact |
Contact page |
/services |
Our services page |
| route khác | 404 - Page not found |
Điều kiện
- Route hợp lệ trả status
200 - Route không tồn tại trả status
404
Yêu cầu thêm
Với route không tồn tại:- trả
Content-Type: text/plain - nội dung phải có cả URL người dùng nhập
/abc thì hiển thị:
404 - Page not found: /abc
Bài 5: Route HTML hoàn chỉnh
Mục tiêu
Luyện trả HTML khác nhau theo từng route.Yêu cầu
Tạo fileserver-pages.js:
Route /
Trả về trang chủ có:
- tiêu đề:
Welcome - mô tả:
This is the home page - menu gồm link:
//about/contact
Route /about
Trả về:
- tiêu đề:
About - nội dung:
We are learning Node.js HTTP server
Route /contact
Trả về:
- tiêu đề:
Contact - email:
[email protected] - số điện thoại:
0123456789
Route khác
Trả về trang HTML lỗi 404:- tiêu đề:
404 Not Found - mô tả có URL vừa nhập
Yêu cầu nâng cao
Tất cả các trang phải có:- cùng 1 menu điều hướng
- thẻ
<title>riêng cho từng trang
Bài 6: Route theo method
Mục tiêu
Làm quen vớireq.method
Yêu cầu
Tạo fileserver-method.js
Khi truy cập /
- Nếu request là
GET→ trả:
This is a GET request
Khi gửi request /submit
- Nếu request là
POST→ trả:
Data submitted successfully
Nếu method không đúng
Ví dụ:GET /submitPOST /
Method not allowed
với status code 405
Gợi ý test
- Trình duyệt thường gửi
GET - Dùng Postman để test
POST
PHẦN 3 — Log request và phân tích request
Bài 7: Ghi log toàn bộ request
Mục tiêu
Luyện đọc:req.methodreq.urlreq.headers
Yêu cầu
Tạo fileserver-log.js
Mỗi lần có request tới server, console phải in:
----- New Request -----
Method: GET
URL: /about
User-Agent: ...
Response trả về
- luôn là
Request received
Yêu cầu thêm
In thêm thời gian hiện tại:Time: 2026-04-21 10:30:00
Bài 8: Server phân tích URL
Mục tiêu
Luyệnreq.url để xử lý logic.
Yêu cầu
Tạo fileserver-analyze.js
Nếu truy cập:
/→ trảHome/product→ trảProduct page/product/1→ trảProduct detail 1/product/2→ trảProduct detail 2
Yêu cầu nâng cao
Không được viết if riêng cho từng/product/1, /product/2, /product/3...
Hãy tìm cách:
- tách URL
- lấy
id - trả về:
Product detail: <id>
Ví dụ:
/product/15→Product detail: 15
PHẦN 4 — Query string và url module
Session 4 cũng có phầnurl module để parse URL và lấy thành phần URL.
Bài 9: Lấy query string từ URL
Mục tiêu
Kết hợphttp + url
Yêu cầu
Tạo fileserver-query.js
Khi truy cập:
http://localhost:3000/user?name=Toan&age=25
Server phải trả về:
Name: Toan
Age: 25
Nếu thiếu query
Ví dụ:/user
thì trả:
Missing query parameters
Yêu cầu thêm
- Nếu chỉ có
name - hoặc chỉ có
agethì thông báo rõ tham số nào bị thiếu
Missing parameter: age
Bài 10: Máy tính mini qua URL
Mục tiêu
Thực hành query string và xử lý logic.Yêu cầu
Tạo fileserver-calc.js
URL có dạng:
/calc?a=10&b=5
Server trả về:
- Tổng
- Hiệu
- Tích
- Thương
Sum: 15
Sub: 5
Mul: 50
Div: 2
Điều kiện
- Nếu
ahoặcbkhông phải số → báo lỗi - Nếu chia cho 0 → báo lỗi riêng
Yêu cầu nâng cao
Trả kết quả dưới dạng HTML bảng:- phép tính
- kết quả
PHẦN 5 — Response nâng cao hơn
Bài 11: Trả JSON thay vì text/html
Mục tiêu
Luyện server kiểu API cơ bản.Yêu cầu
Tạo fileserver-json.js
Route /api/user
Trả JSON:
{
"id": 1,
"name": "Toan",
"role": "student"
}
Route /api/products
Trả JSON mảng:
[
{ "id": 1, "name": "Laptop" },
{ "id": 2, "name": "Mouse" },
{ "id": 3, "name": "Keyboard" }
]
Route khác
Trả JSON lỗi:{
"error": "Not found"
}
Điều kiện
- Phải dùng:
'Content-Type': 'application/json'
- Dùng
JSON.stringify(...)
Bài 12: Kết hợp HTML và JSON
Mục tiêu
Luyện 1 server, nhiều kiểu response.Yêu cầu
Tạo fileserver-mix.js
| Route | Kiểu dữ liệu trả về |
|---|---|
/ |
HTML |
/about |
HTML |
/api/info |
JSON |
/api/time |
JSON |
| route khác | text/plain hoặc HTML 404 |
Nội dung
/api/infotrả tên project, version/api/timetrả thời gian hiện tại
PHẦN 6 — Đọc body request
Bài 13: Nhận dữ liệu từ POST request
Mục tiêu
Luyện phần khó hơn: đọc body bằngreq.on('data') và req.on('end')
Yêu cầu
Tạo fileserver-post.js
Route /login
- Method:
POST - Client gửi body dạng text:
username=admin&password=123456
Server phải:
- đọc body
- in body ra console
- trả response:
Login data received
Yêu cầu nâng cao
Nếu body chứa:username=adminpassword=123456
Login success
ngược lại:
Login failed
Bài 14: Form HTML + xử lý submit
Mục tiêu
Làm mini website hoàn chỉnh.Yêu cầu
Tạo fileserver-form.js
Route GET /
Trả HTML có form:
- input
name - input
email - button submit
POST /submit
Route POST /submit
Server đọc body form và trả về:
<h1>Form Submitted</h1>
<p>Name: ...</p>
<p>Email: ...</p>
Yêu cầu thêm
Nếu thiếuname hoặc email:
- trả status
400 - hiển thị thông báo lỗi
PHẦN 7 — Mini project thực hành dài
Bài 15: Website công ty mini bằng HTTP module
Mục tiêu
Làm 1 project đủ dài, không quá khó.Yêu cầu
Tạo filecompany-server.js
Website có các route:
1. /
Trang chủ:
- tên công ty
- slogan
- menu
2. /about
Giới thiệu công ty:
- lịch sử
- sứ mệnh
- tầm nhìn
3. /services
Hiển thị danh sách dịch vụ:
- Web Development
- Mobile App
- UI/UX Design
4. /contact
Hiển thị:
- phone
- address
5. /api/services
Trả JSON danh sách dịch vụ
6. /api/company
Trả JSON thông tin công ty
7. /not-exist
Trả trang 404 đẹp bằng HTML
Yêu cầu bắt buộc
- Tất cả page HTML có menu chung
- Có
Content-Typeđúng - Có status code đúng
- Có log request ở console
Yêu cầu nâng cao
Trong/services, mỗi dịch vụ phải có link chi tiết:
/services/web/services/mobile/services/design
Bài 16: Student management mini server
Mục tiêu
Thực hành route, JSON, query, status code.Yêu cầu
Tạo filestudent-server.js
Tạo mảng dữ liệu trong code:
const students = [
{ id: 1, name: 'An', age: 20, major: 'IT' },
{ id: 2, name: 'Binh', age: 21, major: 'Business' },
{ id: 3, name: 'Cuong', age: 22, major: 'Design' }
];
Route cần làm
GET /students
Trả toàn bộ danh sách sinh viên
GET /students?id=2
Trả chi tiết sinh viên có id = 2
GET /students/search?major=IT
Lọc sinh viên theo ngành
GET /students/search?age=21
Lọc theo tuổi
Không tìm thấy
Trả:{ "error": "Student not found" }
Yêu cầu nâng cao
Cho phép:/students/search?major=IT&age=20
lọc đồng thời nhiều điều kiện.
Bài 17: Product catalog server
Mục tiêu
Bài này dài hơn, sát kiểu backend cơ bản.Yêu cầu
Tạo fileproduct-server.js
Dữ liệu mẫu:
const products = [
{ id: 1, name: 'Laptop', price: 1500, category: 'electronics' },
{ id: 2, name: 'Phone', price: 800, category: 'electronics' },
{ id: 3, name: 'Table', price: 300, category: 'furniture' },
{ id: 4, name: 'Chair', price: 120, category: 'furniture' }
];
Tính năng
GET /products
Trả danh sách tất cả sản phẩm
GET /products/1
Trả chi tiết sản phẩm id 1
GET /products/category/electronics
Trả sản phẩm theo category
GET /products/search?min=100&max=900
Lọc sản phẩm theo khoảng giá
GET /products/search?name=lap
Tìm theo tên gần đúng
Yêu cầu nâng cao
- Nếu không có sản phẩm → trả mảng rỗng hoặc 404, tùy bạn quy ước
- Ghi rõ quy ước trong comment đầu file
PHẦN 8 — Bài tập khó hơn: thêm POST và quản lý dữ liệu tạm
Bài 18: Thêm sinh viên bằng POST
Mục tiêu
Thực hành:- đọc JSON body
- parse dữ liệu
- push vào mảng
Yêu cầu
Tạo filestudent-api.js
Dữ liệu ban đầu:
let students = [
{ id: 1, name: 'An', age: 20 },
{ id: 2, name: 'Binh', age: 21 }
];
API cần làm
GET /students
Trả toàn bộ sinh viên
POST /students
Client gửi JSON:
{
"name": "Cuong",
"age": 22
}
Server phải:
- đọc body
- parse JSON
- tự sinh
id - thêm vào mảng
- trả JSON sinh viên vừa tạo
Yêu cầu validate
- thiếu
namehoặcage→400 agekhông hợp lệ →400
Bài 19: Update và delete đơn giản
Mục tiêu
Làm quen REST kiểu cơ bản bằng http module thuần.Yêu cầu
Mở rộng tiếp từstudent-api.js
API mới
PUT /students/2
Cập nhật sinh viên id 2
DELETE /students/2
Xóa sinh viên id 2
Yêu cầu
- Nếu không tìm thấy id → trả
404 - Nếu update thành công → trả đối tượng mới
- Nếu delete thành công → trả thông báo thành công
Gợi ý
- Tách URL để lấy id
- Kiểm tra
req.method
PHẦN 9 — Bài tổng hợp lớn
Bài 20: Xây mini backend không dùng Express
Mục tiêu
Đây là bài luyện dài nhất.Yêu cầu
Tạo fileapp.js xây dựng server quản lý công việc todo
Dữ liệu ban đầu:
let todos = [
{ id: 1, title: 'Learn Node.js', completed: false },
{ id: 2, title: 'Practice HTTP server', completed: true }
];
Chức năng phải có
1. GET /
Trả trang HTML giới thiệu API
2. GET /todos
Trả toàn bộ todo dưới dạng JSON
3. GET /todos/1
Trả chi tiết 1 todo
4. POST /todos
Thêm todo mới
Body JSON:
{
"title": "Do homework"
}
5. PUT /todos/1
Cập nhật title hoặc completed
6. DELETE /todos/1
Xóa todo
7. GET /todos/search?completed=true
Lọc theo trạng thái
8. GET /todos/search?keyword=learn
Tìm theo title
Yêu cầu bắt buộc
- status code đúng
- content-type đúng
- xử lý lỗi rõ ràng
- route không tồn tại phải có 404
- body JSON sai format phải báo lỗi
- console log mỗi request
Yêu cầu nâng cao
Tự tách code thành các hàm:sendJson(res, statusCode, data)sendText(res, statusCode, message)parseBody(req)notFound(res)
PHẦN 10 — Checklist test cho mọi bài
Mỗi bài thực hành xong, tự test theo checklist này:Checklist 1
- Server có chạy được không?
- Có vào được
localhost:3000không? - Có bị treo do quên
res.end()không?
Checklist 2
- Header
Content-Typeđã đúng chưa? - Status code có đúng theo từng route chưa?
Checklist 3
- Route sai có ra 404 không?
- Method sai có ra 405 không?
Checklist 4
- Query string thiếu có báo lỗi không?
- Body gửi sai có xử lý lỗi không?
Checklist 5
- Console có log request không?


