Trong lập trình BackEnd thì làm việc với tập tin là một phần không thể thiếu, chúng ta có thể cần đọc tập tin cấu hình, cho phép người dùng tải xuống, tải lên tập tin, … Thêm vào đó thì làm việc với tập tin cũng không phải đơn giản nếu muốn đảm bảo hiệu suất cao. Trong bài này Dũng sẽ cùng các bạn đi tìm hiểu về làm việc với tập tin trong NodeJS nhé.
Khởi tạo dự án
Chúng ta chỉ đơn giản là tạo một thư mục read-write-file
là xong.
Tiếp theo chúng ta hãy tạo một tập tin có tên main.js trong thư mục read-write-file
.
Tạo và ghi một tập tin
Chúng ta có thể tạo và ghi một tập tin với mã nguồn như sau:
const fs = require('fs');
const text = 'Hello Techmaster';
if (fs.existsSync("files")) {
console.log("Files folder exists!");
} else {
fs.mkdirSync("files");
console.log("Created files directory");
}
fs.writeFileSync("files/techmaster.txt", text);
console.log('Write file done.');
Trong đoạn mã này chúng ta có:
- Tạo ra một đối tượng fs đại diện cho module fs, một module core của NodeJS.
- Kiểm tra sự tồn tại của thư mục files.
- Tạo ra một thư mục có tên files nếu chưa tồn tại.
- Ghi dữ liệu vào tập tin “files/techmaster.txt”.
Chúng ta có thể chạy chương trình bằng lệnh node main.js và thấy kết quả là:
Created files directory
Write file done.
Nếu chưa tồn tại thư mục files, hoặc:
Files folder exists!
Write file done.
Nếu đã tồn tại thư mục files.
Ngoài ra bạn cũng sẽ thấy một tập tin techmaster.txt được tạo ra trong thư mục files:
Với nội dung: Hello Techmaster
Đọc một tập tin
Chúng ta có thể đọc một tập tin với mã nguồn như sau:
const data = fs.readFileSync("files/techmaster.txt", { encoding: 'utf8', flag: 'r' });
console.log(data);
Trong mã nguồn chúng ta có:
- Sử dụng hàm readFileSync để đọc tập tin “files/techmaster.txt”.
- Sử dụng encoding: ‘utf8’ để chuyển dạng byte array về text.
- Sử dụng cờ r để mở tập tin chỉ đọc.
Chạy chương trình và kết quả chúng ta nhận được sẽ là:
Hello Techmaster
Vấn đề
Việc sử dụng các hàm đồng bộ nhìn chung rất tiện lợi, tuy nhiên chúng lại không được khuyến khích đối với NodeJS nói riêng và các ngôn ngữ script nói chung vì nó gây ra tình trang block luồng chính, dẫn đến trong các trường hợp khi lưu lượng truy cập cao, các yêu cầu phải chờ lần lượt để được xử lý dẫn đến khả năng phục vụ trở nên kém đến mức nghiêm trọng.
Tổng kết
Như vậy chúng ta đã cùng nhau ghi và đọc một tập tin với NodeJS. Tuy nhiên chúng ta đang sử dụng các hàm đồng bộ hoá và cách này chưa tối ưu, chúng ta sẽ cùng tìm hiểu cách sử dụng bất đồng bộ trong bài sau nhé.
Cám ơn bạn đã quan tâm đến bài viết|video này. Để nhận được thêm các kiến thức bổ ích bạn có thể:
- Đọc các bài viết của TechMaster trên facebook: https://www.facebook.com/techmastervn
- Xem các video của TechMaster qua Youtube: https://www.youtube.com/@TechMasterVietnam nếu bạn thấy video/bài viết hay bạn có thể theo dõi kênh của TechMaster để nhận được thông báo về các video mới nhất nhé.
- Chat với techmaster qua Discord: https://discord.gg/yQjRTFXb7a
Bình luận