Chủ Nhật, 16/06/2019 | 00:00 GMT+7

Giới thiệu về module fs trong Node.js


fs , viết tắt của File System , là một trong những module cơ bản và hữu ích nhất trong Node. Trong bài viết này, ta sẽ xem xét một số phương pháp quan trọng và hữu ích nhất để thao tác với hệ thống file .

Bắt đầu

Tất nhiên, bạn cần phải cài đặt Node.js trước. Bạn có thể làm điều đó ở đây . May mắn cho ta , fs là một trong những module 'ngoài hộp' đi kèm với Node nên nó đã có sẵn cho bạn.

const fs = require('fs');

Đồng bộ so với Không đồng bộ

Mọi phương thức fs có cả version đồng bộkhông đồng bộ với tên cho dạng đồng bộ chỉ kết thúc bằng Sync . Vì vậy, một fs.writeFile() không đồng bộ trở thành fs.writeFileSync() . Tất nhiên, Mã đồng bộ sẽ dừng chạy mã sau này khi có lỗi, nhưng chúng đơn giản hơn để giải quyết vấn đề này đối với tất cả các ví dụ trong bài viết này, ta sẽ sử dụng các dạng đồng bộ của chúng.

Hoạt động cơ bản

Các thao tác CRUD cơ bản (tạo, đọc, cập nhật và xóa) rất đơn giản chỉ với 3 chức năng chính.

  • fs.writeFileSync()
  • fs.readFileSync()
  • fs.unlinkSync()

fs.writeFileSync ()

fs.writeFileSync() chỉ nhận hai đối số; đường dẫn đến vị trí của file mới, phải kết thúc bằng tên của file mới và dữ liệu bạn muốn lưu trữ.

gator.js
const gators = [{
  type: 'cayman'
}];

fs.writeFileSync('./swamp/cayman.json', JSON.stringify(gators));

Kết quả:

đầm lầy / cayman.json
[{"type":"cayman"}]

Lưu ý fs.writeFileSync() đang viết lại hoàn toàn nội dung trong cayman.json vì vậy nếu bạn thay đổi type: 'cayman' thành type: 'croc' và chạy lại file , cayman sẽ được thay thế. Điều này có thể có những hạn chế đáng kể về hiệu suất khi sửa đổi các file lớn.

fs.readFileSync ()

Theo mặc định, tất cả dữ liệu được trả về dưới dạng ' cache ', một chuỗi số được mã hóa đặc biệt, để khắc phục điều này, chỉ cần chuyển 'utf8' làm đối số thứ hai.

Ở đây ta sẽ trả về một mảng trống nếu cayman.json trống và trả về dữ liệu nếu nó tồn tại.

gator.js
const gators = [{
    type: 'cayman'
}];


const getData = () => {
  let data = fs.readFileSync('./swamp/cayman.json', 'utf8');

  if (!data) return [];
  else {
    const file = JSON.parse(data);
    return file;
  }
}

const data = getData();

unlinkSync ()

Hủy liên kết là cách đơn giản nhất trong ba cách, chỉ yêu cầu đường dẫn đến file hoặc softlink mà bạn muốn xóa.

fs.unlinkSync('./swamp/cayman.json');

Hoạt động CRUD trên folder

Ba phương thức trên có các đối tác hữu ích để tự thao tác các folder .

  • fs.mkdirSync()
  • fs.rmdirSync()
  • fs.readdirSync()

Vì cách sử dụng fs.mkdirSync()fs.readdirSync() giống như các đối tác file của chúng, ta sẽ kết thúc bằng việc tìm ra các fs.rmdirSync() đi kèm với fs.rmdirSync() .

rimraf vs fs.rmdirSync ()

Vấn đề chính với việc sử dụng fs.rmdirSync() để xóa các folder là thực tế là nó sẽ chỉ hoạt động trên các folder trống. Nếu bạn đã thử sử dụng nó để xóa ./swamp nó sẽ trả về:

Error: ENOTEMPTY: directory not empty, rmdir './swamp'

mà rõ ràng không phải là những gì ta muốn. Đáng buồn thay, Node không có giải pháp root cho việc này, vì một số lý do, vì vậy ta sẽ phải xem xét ở nơi khác.

Giải pháp đơn giản nhất mà tôi đã tìm thấy là một gói npm có tên là rimraf , vì vậy hãy nhanh chóng cài đặt nó.

$ npm i rimraf

Cú pháp rất giống nhau, ngoại trừ thay vì fs, bạn gọi rimraf.sync() (hoặc rimraf() đơn giản cho version không đồng bộ) và chuyển vào đường dẫn của bạn như bạn mong đợi.

const rimraf = require('rimraf');

rimraf.sync('./swamp');

Kết luận

Chỉ với một vài chức năng này, bạn có thể xử lý nhiều trường hợp sử dụng phổ biến với thao tác trên file và dữ liệu của chúng.

Bất kỳ phần giới thiệu nào về một công nghệ mới sẽ đi kèm với việc giới thiệu tài liệu bắt buộc (nó thực sự là một trong những cách tốt nhất để khám phá điều gì đó).


Tags:

Các tin liên quan