Kiến thức cơ bản về Node.js

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 31 tháng 1, 2025

1. Modules trong Node.js

Node.js có hệ thống module mạnh mẽ, giúp tổ chức mã nguồn tốt hơn và tái sử dụng dễ dàng.

1.1 Core Modules

Node.js cung cấp nhiều core modules tích hợp sẵn như:

  • fs (File System) – làm việc với file
  • http – tạo server HTTP
  • path – xử lý đường dẫn file
  • os – lấy thông tin hệ điều hành
  • events – xử lý sự kiện

Ví dụ sử dụng fs để đọc file:

const fs = require("fs");

fs.readFile("example.txt", "utf8", (err, data) => {
  if (err) {
    console.error("Lỗi khi đọc file:", err);
    return;
  }
  console.log("Nội dung file:", data);
});

1.2 Tạo module tùy chỉnh

Bạn có thể tự tạo module bằng cách sử dụng module.exports.

Ví dụ: Tạo module math.js để xử lý phép tính

// math.js
function add(a, b) {
  return a + b;
}

function subtract(a, b) {
  return a - b;
}

module.exports = { add, subtract };

Import và sử dụng module math.js trong app.js

const math = require("./math");

console.log(math.add(5, 3)); // 8
console.log(math.subtract(10, 4)); // 6

1.3 Import/Export module với requiremodule.exports

  • module.exports dùng để xuất dữ liệu từ module.
  • require dùng để nhập module vào file khác.

Ví dụ xuất nhiều function từ module:

// utils.js
module.exports = {
  sayHello: function () {
    return "Hello, Node.js!";
  },
  currentTime: function () {
    return new Date().toLocaleTimeString();
  },
};

Sử dụng module:

const utils = require("./utils");

console.log(utils.sayHello()); 
console.log(utils.currentTime()); 

2. NPM (Node Package Manager)

2.1 Cài đặt và sử dụng package

NPM là trình quản lý package cho Node.js, cho phép cài đặt các thư viện từ npmjs.com.

Cài đặt package:

npm install lodash

Sử dụng lodash trong code:

const _ = require("lodash");

const numbers = [1, 2, 3, 4, 5];
console.log(_.shuffle(numbers)); 

2.2 Tạo file package.json

Dùng package.json để quản lý thông tin dự án và package.

Khởi tạo package.json tự động:

npm init -y

Cấu trúc file package.json:

{
  "name": "my-node-app",
  "version": "1.0.0",
  "description": "Ứng dụng Node.js đầu tiên",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "lodash": "^4.17.21"
  }
}

2.3 Sử dụng các script trong package.json

Thêm lệnh trong package.json:

"scripts": {
  "start": "node index.js",
  "dev": "nodemon index.js"
}

Chạy ứng dụng:

npm run start

Chạy ở chế độ phát triển với nodemon (tự động reload):

npm run dev

3. Event Loop trong Node.js

3.1 Cách Node.js xử lý non-blocking I/O

Node.js sử dụng event loop để xử lý I/O mà không chặn chương trình.

Ví dụ blocking code (chặn chương trình):

const fs = require("fs");

const data = fs.readFileSync("example.txt", "utf8");
console.log(data); 
console.log("Lệnh này chạy sau khi đọc file xong.");

Ví dụ non-blocking code (không chặn chương trình):

fs.readFile("example.txt", "utf8", (err, data) => {
  console.log(data); 
});

console.log("Lệnh này chạy ngay lập tức!");

Kết quả chạy code non-blocking:

Lệnh này chạy ngay lập tức!
(Nội dung file hiển thị sau khi đọc xong)

3.2 Ví dụ minh họa event loop

Code minh họa event loop trong Node.js:

console.log("Bắt đầu");

setTimeout(() => {
  console.log("Chạy sau 2 giây");
}, 2000);

console.log("Kết thúc");

Kết quả chạy:

Bắt đầu
Kết thúc
Chạy sau 2 giây

Giải thích:

  1. console.log("Bắt đầu") chạy ngay.
  2. setTimeout() đưa callback vào hàng chờ của event loop.
  3. console.log("Kết thúc") chạy tiếp, không bị chặn bởi setTimeout().
  4. Sau 2 giây, callback trong setTimeout() được thực thi.

Tổng kết

  • Modules trong Node.js: Core modules (fs, http, path), tạo module tùy chỉnh với requiremodule.exports.
  • NPM: Cài đặt package, tạo package.json, viết script để chạy ứng dụng.
  • Event Loop: Cơ chế non-blocking giúp xử lý nhiều tác vụ mà không chặn chương trình.
Website Logo

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.

Bình luận

Website Logo

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.

Liên hệ công việc qua email dưới đây.

lhvuctu@gmail.com

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ