path.dirname(): Thám Tử Đường Dẫn Của Gen Z Node.js
Nodejs

path.dirname(): Thám Tử Đường Dẫn Của Gen Z Node.js

Author

Admin System

@root

Ngày xuất bản

20 Mar, 2026

Lượt xem

2 Lượt

"path.dirname()"

Chào các bạn Gen Z mê code, hôm nay anh Creyt sẽ cùng các em "bóc tách" một công cụ nhỏ nhưng có võ trong Node.js, đó là path.dirname(). Nghe có vẻ khô khan nhưng tin anh đi, nó thú vị hơn em tưởng nhiều!

path.dirname(): Thám Tử Tìm Địa Chỉ Nhà

Tưởng tượng thế này nhé: mỗi file trên máy tính của em giống như một căn nhà có địa chỉ rõ ràng. Ví dụ, C:/Users/genz_coder/projects/my_app/src/index.js. Đây là một địa chỉ đầy đủ, từ con phố lớn nhất (ổ đĩa C) cho đến số nhà (file index.js).

Vậy path.dirname() làm gì? Đơn giản là nó giống như một thám tử chỉ quan tâm đến "khu phố" mà căn nhà đó tọa lạc, mà không cần biết chính xác số nhà hay tên chủ nhà là gì. Nó sẽ cắt phéng cái tên file cuối cùng đi và trả về nguyên cái đường dẫn đến thư mục chứa nó.

Tóm lại:

  • Là gì? Một hàm trong module path của Node.js.
  • Để làm gì? Trích xuất phần thư mục (directory) từ một đường dẫn file hoặc thư mục đã cho. Nó bỏ qua tên file hoặc thư mục cuối cùng và trả về đường dẫn đến thư mục cha.

Code Ví Dụ Minh Họa: "Đường Về Nhà"

Để dùng path.dirname(), đầu tiên em phải "nhập khẩu" module path vào script của mình cái đã.

const path = require('path');

// Case 1: Đường dẫn file thông thường
const filePath1 = '/users/creyt/documents/report.pdf';
const dirName1 = path.dirname(filePath1);
console.log(`Đường dẫn thư mục của '${filePath1}': ${dirName1}`);
// Output: Đường dẫn thư mục của '/users/creyt/documents/report.pdf': /users/creyt/documents

// Case 2: Đường dẫn thư mục (có hoặc không có dấu gạch chéo cuối)
const dirPath2 = '/home/genz_app/';
const dirName2 = path.dirname(dirPath2);
console.log(`Đường dẫn thư mục của '${dirPath2}': ${dirName2}`);
// Output: Đường dẫn thư mục của '/home/genz_app/': /home

const dirPath3 = '/home/genz_app'; // Không có dấu gạch chéo cuối
const dirName3 = path.dirname(dirPath3);
console.log(`Đường dẫn thư mục của '${dirPath3}': ${dirName3}`);
// Output: Đường dẫn thư mục của '/home/genz_app': /home

// Case 3: Đường dẫn gốc (root path)
const rootPath = '/';
const dirNameRoot = path.dirname(rootPath);
console.log(`Đường dẫn thư mục của '${rootPath}': ${dirNameRoot}`);
// Output: Đường dẫn thư mục của '/': /

const windowsRootPath = 'C:\\'; // Chú ý: trong string, '\' phải viết là '\\' để escape
const dirNameWindowsRoot = path.dirname(windowsRootPath);
console.log(`Đường dẫn thư mục của '${windowsRootPath}': ${dirNameWindowsRoot}`);
// Output: Đường dẫn thư mục của 'C:\': C:\

// Case 4: Đường dẫn tương đối
const relativePath = 'data/images/avatar.jpg';
const dirNameRelative = path.dirname(relativePath);
console.log(`Đường dẫn thư mục của '${relativePath}': ${dirNameRelative}`);
// Output: Đường dẫn thư mục của 'data/images/avatar.jpg': data/images

const currentFileDir = __dirname; // __dirname là biến toàn cục trong Node.js, chứa đường dẫn thư mục của file hiện tại
console.log(`Thư mục của file hiện tại: ${currentFileDir}`);
// Output ví dụ: Thư mục của file hiện tại: /path/to/your/script

Thấy chưa? Nó cực kỳ "thẳng tính", cứ cái gì nằm sau cái cuối cùng là nó "xóa sổ" hết, chỉ giữ lại "khu phố" thôi.

Illustration

Mẹo Vặt Của Anh Creyt (Best Practices)

  1. "Đừng Tự Làm Thám Tử Bằng Tay": Đừng bao giờ dại dột mà tự mình cắt chuỗi đường dẫn bằng split('/') hay substring()! Mỗi hệ điều hành (Windows, macOS, Linux) lại có cách dùng dấu phân cách khác nhau (\ hay /). path.dirname() sinh ra là để giải quyết vấn đề này, nó tự động nhận diện hệ điều hành và dùng dấu phân cách phù hợp. Dùng nó để code của em "chạy mượt" trên mọi nền tảng.
  2. "Bạn Thân Của path.join()": path.dirname() thường đi đôi với path.join(). Khi em đã có thư mục cha, em có thể dùng path.join() để xây dựng các đường dẫn con một cách an toàn và chuẩn chỉnh.
    const currentDir = path.dirname(__filename); // Lấy thư mục của file hiện tại
    const configFilePath = path.join(currentDir, 'config', 'app.config.json');
    console.log(`Đường dẫn file config: ${configFilePath}`);
    // Output ví dụ: Đường dẫn file config: /path/to/your/script/config/app.config.json
    
  3. "Dấu Gạch Chéo Cuối Cùng Là Vô Hình": path.dirname() rất "thờ ơ" với dấu gạch chéo / (hoặc \) ở cuối đường dẫn. Nó sẽ tự động bỏ qua chúng khi xác định thư mục cha. Ví dụ, path.dirname('/home/user/')path.dirname('/home/user') đều trả về /home. Cứ yên tâm mà dùng nhé!

Ứng Dụng Thực Tế: "Ai Đã Dùng Nó?"

Nhiều lắm em ơi, từ những gã khổng lồ đến các startup nhỏ đều dùng nó để "định vị" và "điều hướng" trong hệ thống file:

  • Web Servers (như Express.js): Khi em muốn phục vụ các file tĩnh (HTML, CSS, JS, ảnh) từ một thư mục nào đó (ví dụ: thư mục public của ứng dụng), path.dirname(__filename) thường được dùng để tìm ra thư mục gốc của ứng dụng, sau đó dùng path.join() để tạo đường dẫn tuyệt đối đến thư mục public.
  • Build Tools (như Webpack, Gulp): Các công cụ này cần biết vị trí của các file cấu hình, các module, hay nơi để xuất ra các file đã build. path.dirname() giúp chúng xác định vị trí tương đối của các tài nguyên này một cách linh hoạt.
  • Hệ thống quản lý file/upload: Khi người dùng upload một file, em thường muốn lưu nó vào một thư mục cụ thể, chẳng hạn uploads/user_id/ten_file.jpg. path.dirname() có thể giúp em trích xuất phần uploads/user_id/ từ một đường dẫn đầy đủ, hoặc xác định thư mục gốc để tạo cấu trúc thư mục con.

Thử Nghiệm Của Anh Creyt & Khi Nào Thì Nên Dùng

Ngày xưa, khi anh Creyt còn là "tấm chiếu mới" như các em, anh cũng từng thử tự mình "cưa" chuỗi đường dẫn để lấy thư mục cha. Kết quả? Một mớ bòng bong không hơn không kém! Code chạy tốt trên máy Windows của anh nhưng mang sang máy Linux của thằng bạn thì "toang" ngay vì dấu /\ khác nhau. Đó là lúc anh nhận ra path.dirname() chính là "vị cứu tinh".

Khi nào nên dùng path.dirname()?

  • Đọc file cấu hình hoặc tài nguyên: Khi file config.json của em nằm cùng thư mục với script chính (app.js), em sẽ dùng path.dirname(__filename) để lấy đường dẫn thư mục hiện tại, rồi path.join() để tạo đường dẫn đầy đủ đến config.json.
  • Tạo thư mục tạm thời hoặc log: Em muốn tạo một thư mục logs bên cạnh file script đang chạy? path.dirname(__filename) + path.join() là lựa chọn hoàn hảo.
  • Xử lý đường dẫn động: Khi em nhận được một đường dẫn file từ bên ngoài (ví dụ: từ API, từ người dùng) và em chỉ muốn biết nó nằm ở "khu phố" nào để xử lý tiếp (ví dụ: kiểm tra quyền truy cập vào thư mục đó).

Nhớ nhé các em, path.dirname() không chỉ là một hàm, nó là một tư duy về việc xử lý đường dẫn một cách thông minh, an toàn và đa nền tảng. Hãy "kết thân" với nó để code của em "chất" hơn, "pro" hơn! Hẹn gặp lại trong bài học tiếp theo của anh Creyt!

Thuộc Series: Nodejs

Bài giảng này được tự động xuất bản ngẫu nhiên từ thư viện kiến thức. Đừng quên đón xem các Từ khoá Hướng Dẫn tiếp theo nhé!

#tech #cyberpunk #laravel
Chỉnh sửa bài viết

Bình luận (0)

Vui lòng Đăng Nhập để Bình luận

Hỗ trợ Markdown cơ bản
Nguyễn Văn A
1 ngày trước

Tính năng này đỉnh quá ad ơi, chờ mãi mới thấy một blog Tiếng Việt có UI/UX xịn như vầy!