NTM Solutions

Thứ Năm, 23 tháng 7, 2026

🚀 Node.js LTS (2026) — Bài 07: Path - Làm việc với đường dẫn một cách an toàn 🛣️

"Đừng tự nối đường dẫn bằng dấu /. Hãy để Node.js xử lý điều đó bằng module path để chương trình hoạt động đúng trên mọi hệ điều hành."


🎯 Mục tiêu bài học

Sau bài này bạn sẽ:

  • Hiểu module path là gì.

  • Biết vì sao cần dùng path thay vì tự nối chuỗi.

  • Thành thạo các hàm:

    • join()

    • resolve()

    • basename()

    • dirname()

    • extname()

  • Biết kết hợp path với fs.

  • Viết chương trình tương thích trên Windows, Linux và macOS.


path là gì?

path là module có sẵn của Node.js dùng để xử lý đường dẫn (path).

Không cần cài đặt thêm.

Import:

import path from "node:path";

Hoặc

import { join } from "node:path";

Vì sao cần dùng path?

Giả sử bạn tự nối đường dẫn:

const file = "images/" + "logo.png";

Có thể hoạt động trên máy bạn.

Nhưng:

Windows

images\logo.png

Linux

images/logo.png

macOS

images/logo.png

Node.js sẽ tự chọn dấu phân cách phù hợp nếu dùng path.


join()

Đây là hàm được sử dụng nhiều nhất.

import path from "node:path";

const file =
    path.join(
        "images",
        "logo.png"
    );

console.log(file);

Windows

images\logo.png

Linux

images/logo.png

Có nhiều cấp:

path.join(
    "public",
    "uploads",
    "avatar.png"
);

Kết quả

public/uploads/avatar.png

(hoặc \ trên Windows)


resolve()

resolve() tạo đường dẫn tuyệt đối.

Ví dụ

import path from "node:path";

console.log(
    path.resolve("data.txt")
);

Kết quả

C:\Projects\basic\data.txt

Hoặc

/home/user/basic/data.txt

Ví dụ

const file =
    path.resolve(
        "images",
        "logo.png"
    );

console.log(file);

basename()

Lấy tên file.

import path from "node:path";

console.log(
    path.basename(
        "images/logo.png"
    )
);

Kết quả

logo.png

Bỏ phần mở rộng

console.log(

path.basename(
"logo.png",
".png"
)

);

Kết quả

logo

dirname()

Lấy thư mục cha.

console.log(

path.dirname(
"images/logo.png"
)

);

Kết quả

images

extname()

Lấy phần mở rộng.

console.log(

path.extname(
"photo.jpg"
)

);

Kết quả

.jpg

Ví dụ

path.extname("index.html");

.html

parse()

Chuyển path thành object.

console.log(

path.parse(
"images/logo.png"
)

);

Kết quả

{
 root:'',
 dir:'images',
 base:'logo.png',
 ext:'.png',
 name:'logo'
}

format()

Ngược lại với parse().

const file =
path.format({

dir:"images",

name:"logo",

ext:".png"

});

console.log(file);

images/logo.png

isAbsolute()

Kiểm tra đường dẫn tuyệt đối.

console.log(

path.isAbsolute(
"C:\\temp"
)

);

true

Ví dụ

path.isAbsolute(
"images/logo.png"
);

false

normalize()

Chuẩn hóa đường dẫn.

console.log(

path.normalize(
"images//logo.png"
)

);

images/logo.png

Ví dụ

path.normalize(

"public/uploads/../avatar.png"

);

public/avatar.png

Kết hợp path và fs

Đây là cách viết phổ biến.

import fs from "node:fs";

import path from "node:path";

const file =

path.join(
"data",
"users.json"
);

const data =
fs.readFileSync(
file,
"utf8"
);

console.log(data);

__dirname trong ES Module

Trong CommonJS có:

console.log(__dirname);

Nhưng ES Module không hỗ trợ trực tiếp.

Thay vào đó:

import { fileURLToPath } from "node:url";

import path from "node:path";

const __filename =
fileURLToPath(import.meta.url);

const __dirname =
path.dirname(__filename);

console.log(__dirname);

Đây là cách chuẩn khi cần lấy thư mục chứa file hiện tại trong ES Module.


Ví dụ thực tế

Cấu trúc

project/

app.js

uploads/

avatar.png

Đọc ảnh

const avatar =

path.join(
"uploads",
"avatar.png"
);

Không cần quan tâm Windows hay Linux.


Khi nào dùng join()?

✔ Nối thư mục

✔ Tạo đường dẫn file

✔ Đọc file

✔ Upload

✔ Express

✔ Prisma

Đây là hàm được dùng nhiều nhất.


resolve() hay join()?

join()

path.join(
"images",
"logo.png"
);

images/logo.png

Là đường dẫn tương đối.


resolve()

path.resolve(
"images",
"logo.png"
);

C:\Project\images\logo.png

Là đường dẫn tuyệt đối.


Những lỗi thường gặp

Tự nối chuỗi

const file =
"images/" +
"logo.png";

Không nên.

Hãy dùng

path.join(
"images",
"logo.png"
);

Hard-code dấu ""

"images\\logo.png"

Sai trên Linux.


Hard-code dấu "/"

"images/logo.png"

Có thể chạy trong nhiều trường hợp, nhưng không phải là cách viết đa nền tảng và dễ bảo trì.


Không dùng resolve()

Ví dụ

fs.readFileSync(
"data.txt"
);

Nếu chạy ở thư mục khác có thể báo lỗi:

ENOENT

Giải pháp

path.resolve(
"data.txt"
);

Tổng kết

Module path giúp xử lý đường dẫn một cách an toàn, rõ ràng và tương thích trên nhiều hệ điều hành. Thay vì tự nối chuỗi bằng dấu / hoặc \, bạn nên sử dụng các hàm như join(), resolve(), basename(), dirname()extname() để giảm lỗi và tăng tính chuyên nghiệp cho mã nguồn.

Trong các dự án thực tế, path gần như luôn đi cùng với fs, Express và các thư viện khác để truy cập tệp, thư mục và tài nguyên của ứng dụng.


Bài tiếp theo

👉 Bài 08 — OS

Bạn sẽ học:

  • Module os là gì.

  • Lấy thông tin hệ điều hành.

  • Kiểm tra CPU, RAM và kiến trúc máy.

  • Xem thư mục Home và thư mục tạm (Temp).

  • Ứng dụng module os để xây dựng các công cụ giám sát và thu thập thông tin hệ thống bằng Node.js.

Không có nhận xét nào:

Đăng nhận xét

Facebook Youtube RSS