Node.js cho phép chạy JavaScript bên ngoài trình duyệt để viết máy chủ web, API, công cụ dòng lệnh và ứng dụng thời gian thực. Bài này giải thích Node.js hoạt động ra sao, cài đặt bản LTS và chạy chương trình đầu tiên.
- Hiểu Node.js: V8, event loop, I/O không chặn
- Phân biệt JavaScript trong trình duyệt và trong Node.js
- Cài Node.js LTS, quản lý phiên bản bằng nvm
- Chạy tệp .js, dùng REPL, chế độ --watch
- Runtime
- Môi trường chạy mã: Node.js = V8 + thư viện hệ thống (libuv).
- LTS
- Bản hỗ trợ dài hạn (số chẵn), nên dùng cho dự án.
- Non-blocking I/O
- Đọc tệp, gọi mạng không làm đứng chương trình.
- REPL
- Cửa sổ gõ lệnh và xem kết quả ngay.
Một số khái niệm
Node.js (2009) dùng engine V8 của Chrome để chạy JavaScript, cộng thư viện libuv để làm việc với tệp, mạng theo kiểu bất đồng bộ không chặn: một luồng xử lý được hàng nghìn kết nối vì không ngồi chờ ổ đĩa hay mạng. Nhờ vậy Node.js rất hợp với API, ứng dụng chat, máy chủ thời gian thực; kém phù hợp với tính toán nặng kéo dài.
| Trình duyệt | Node.js |
|---|---|
| window, document, DOM | Không có DOM; có process, Buffer, global |
| Bị giới hạn bảo mật (sandbox) | Truy cập tệp, mạng, hệ điều hành |
| import qua <script type="module"> | import/require mô-đun, gói npm |
| fetch, localStorage | fetch có sẵn; không có localStorage |
Một ứng dụng web hiện đại thường dùng JavaScript ở cả hai phía: giao diện (React, Next.js) và máy chủ (Node.js), chung một ngôn ngữ.
Cài đặt
- Tải bản LTS tại nodejs.org và cài như phần mềm thường (Windows, macOS).
- Hoặc dùng trình quản lý phiên bản: nvm-windows / nvm (macOS, Linux), fnm, cho phép cài nhiều phiên bản và chuyển đổi theo dự án.
- Kiểm tra trong Terminal (VS Code: Ctrl + `):
node -v # ví dụ v24.x.x
npm -v
nvm install --lts && nvm use --lts # nếu dùng nvmChương trình đầu tiên
// xin-chao.js
const ten = process.argv[2] ?? 'bạn';
console.log(`Xin chào ${ten}! Node.js ${process.version} trên ${process.platform}`);
const batDau = Date.now();
setTimeout(() => console.log('Sau 1 giây (không chặn)'), 1000);
console.log('Dòng này in trước, vì setTimeout không chặn chương trình');
console.log('Mất', Date.now() - batDau, 'ms');node xin-chao.js An
node --watch xin-chao.js # tự chạy lại khi lưu tệp
node # vào REPL, gõ 1 + 1, .exit để thoátNode.js dùng để làm gì?
| Lĩnh vực | Công cụ tiêu biểu |
|---|---|
| API, máy chủ web | Express, Fastify, NestJS, Hono |
| Ứng dụng full-stack | Next.js, Nuxt, Remix |
| Thời gian thực | Socket.IO, WebSocket |
| Công cụ dòng lệnh, build | npm, Vite, ESLint, Prettier |
| Desktop | Electron (VS Code, Slack) |
Node.js mới chạy trực tiếp tệp TypeScript (node app.ts) nhờ cơ chế xóa kiểu; xem loạt TypeScript Bài 9.
Không dùng bản Node.js “Current” (số lẻ) cho dự án thật; luôn chọn LTS để được vá lỗi và bảo mật lâu dài.
- Cài Node.js LTS, kiểm tra phiên bản.
- Viết chương trình nhận tên từ dòng lệnh và chào.
- Thử REPL: tính toán, khai báo hàm.
- Quan sát thứ tự in khi có setTimeout và giải thích.
- Node.js = V8 + libuv, chạy JS ngoài trình duyệt.
- I/O bất đồng bộ không chặn, hợp API và thời gian thực.
- Dùng bản LTS; nvm để quản lý phiên bản.
- node tep.js, node --watch, REPL.