Node.js đưa JavaScript ra khỏi trình duyệt: viết công cụ dòng lệnh, xử lý tệp, làm máy chủ web. Bài này hướng dẫn dùng Node.js bản LTS hiện tại, npm, package.json và viết API đầu tiên.
- Cài Node.js LTS và quản lý phiên bản
- Hiểu package.json, dependencies, scripts
- Đọc ghi tệp với node:fs/promises
- Viết máy chủ API nhỏ bằng Express hoặc node:http
- Runtime
- Môi trường chạy JS ngoài trình duyệt.
- npm
- Trình quản lý gói đi kèm Node.js.
- LTS
- Phiên bản hỗ trợ dài hạn, nên dùng cho dự án.
- Semver
- Quy ước phiên bản MAJOR.MINOR.PATCH.
Khái niệm và lý thuyết
Node.js dùng engine V8 của Chrome cộng các mô-đun hệ thống (tệp, mạng, tiến trình). Không có document hay window, thay vào đó có process, node:fs, node:path... Node.js mới hỗ trợ sẵn nhiều thứ trước đây cần thư viện: fetch, chạy kiểm thử (node --test), theo dõi tệp (--watch), đọc .env (--env-file) và chạy trực tiếp tệp TypeScript.
Ngoài Node.js còn có Deno và Bun; kiến thức trong bài áp dụng được phần lớn cho cả hai.
Khởi tạo dự án
node -v # kiểm tra phiên bản (nên dùng bản LTS chẵn)
mkdir api-demo && cd api-demo
npm init -y
npm install express
npm install -D eslint{
"name": "api-demo",
"type": "module",
"scripts": { "dev": "node --watch --env-file=.env server.js", "test": "node --test" },
"dependencies": { "express": "^5.1.0" }
}^5.1.0 nghĩa là chấp nhận bản 5.x mới hơn nhưng không lên 6. Tệp package-lock.json khóa phiên bản chính xác, cần commit lên Git; thư mục node_modules thì không.
Làm việc với tệp
import { readFile, writeFile } from "node:fs/promises";
import path from "node:path";
const tep = path.join(import.meta.dirname, "data.json");
const ds = JSON.parse(await readFile(tep, "utf8"));
ds.push({ id: Date.now(), ten: "Mới" });
await writeFile(tep, JSON.stringify(ds, null, 2));API với Express
import express from "express";
const app = express();
app.use(express.json());
const sach = [{ id: 1, ten: "Học JavaScript" }];
app.get("/api/sach", (req, res) => res.json(sach));
app.post("/api/sach", (req, res) => {
if (!req.body?.ten) return res.status(400).json({ loi: "Thiếu tên" });
const s = { id: sach.length + 1, ten: req.body.ten };
sach.push(s);
res.status(201).json(s);
});
app.listen(process.env.PORT ?? 3000, () => console.log("http://localhost:3000"));Thử API bằng tiện ích REST Client của VS Code, Postman hoặc curl.
Dùng npx để chạy công cụ mà không cài toàn cục, ví dụ npx serve . để mở nhanh một máy chủ tĩnh.
Thông tin bí mật (mật khẩu CSDL, khóa API) đặt trong tệp .env và thêm vào .gitignore; tuyệt đối không ghi thẳng vào mã.
- Viết script Node đọc danh sách sinh viên từ CSV, xuất JSON.
- Tạo API sách với GET, POST, DELETE /api/sach/:id.
- Thêm script npm "dev" dùng --watch.
- Gọi API từ trang HTML ở Bài 7 bằng fetch.
- Node.js chạy JS phía máy chủ với V8.
- package.json quản lý gói và scripts; khóa phiên bản bằng lockfile.
- node:fs/promises đọc ghi tệp bất đồng bộ.
- Express giúp viết REST API nhanh.