Bài 1. Node.js là gì? Cài đặt và chương trình đầu tiên

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.

40 phútCơ bản
Bạn sẽ học được
  • 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
Thuật ngữ cần biết
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ệtNode.js
window, document, DOMKhô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, localStoragefetch 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 nvm

Chươ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át

Node.js dùng để làm gì?

Lĩnh vựcCông cụ tiêu biểu
API, máy chủ webExpress, Fastify, NestJS, Hono
Ứng dụng full-stackNext.js, Nuxt, Remix
Thời gian thựcSocket.IO, WebSocket
Công cụ dòng lệnh, buildnpm, Vite, ESLint, Prettier
DesktopElectron (VS Code, Slack)
Mẹo hay

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.

Lưu ý

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.

Thực hành
  1. Cài Node.js LTS, kiểm tra phiên bản.
  2. Viết chương trình nhận tên từ dòng lệnh và chào.
  3. Thử REPL: tính toán, khai báo hàm.
  4. Quan sát thứ tự in khi có setTimeout và giải thích.
Tóm tắt bài học
  • 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.