Bài 14. Node.js và npm thực hành

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.

60 phútTrung cấp
Bạn sẽ học được
  • 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
Thuật ngữ cần biết
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.

Mẹo hay

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.

Lưu ý

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ã.

Thực hành
  1. Viết script Node đọc danh sách sinh viên từ CSV, xuất JSON.
  2. Tạo API sách với GET, POST, DELETE /api/sach/:id.
  3. Thêm script npm "dev" dùng --watch.
  4. Gọi API từ trang HTML ở Bài 7 bằng fetch.
Tóm tắt bài học
  • 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.