node入門之基礎API:fs

官方解釋:

fs 模塊提供了一個 API,用於以模仿標準 POSIX 函數的方式與文件系統進行交互。

要使用此模塊:

const fs = require('fs');

所有文件系統操作都具有同步和異步的形式。

異步的形式總是將完成回調作爲其最後一個參數。 傳給完成回調的參數取決於具體方法,但第一個參數始終預留用於異常。 如果操作成功完成,則第一個參數將爲 null 或 undefined

使用同步的操作發生的異常會立即拋出,可以使用 try/catch 處理,也可以允許冒泡。

fs.readFile 讀取文件

注意:一般我們都會採用異步讀取數據,如果採用同步,在高併發的情況下,會將請求堵塞。

fs.writeFile():

異步地將數據寫入到一個文件,如果文件已存在則覆蓋該文件。 data 可以是字符串或 buffer。

如果 data 是一個 buffer,則 encoding 選項會被忽略。

在同一個文件上多次使用 fs.writeFile() 且不等待回調是不安全的。 對於這種情況,建議使用 fs.createWriteStream()

fs.Stats 類:

fs.Stats 對象提供有關文件的信息。

從 fs.stat()fs.lstat() 和 fs.fstat() 及其同步方法返回的對象都屬於此類型。 如果傳給這些方法的 options 中的 bigint 爲 true,則數值將爲 bigint 型而不是 number 型。

fs.rename():

異步地將 oldPath 上的文件重命名爲 newPath 提供的路徑名。 如果 newPath 已存在,則覆蓋它。 除了可能的異常,完成回調沒有其他參數。

fs.unlink():

異步地刪除文件或符號鏈接。 除了可能的異常,完成回調沒有其他參

fs.readdir(): 

讀取目錄的內容。 回調有兩個參數 (err, files),其中 files 是目錄中的文件名的數組(不包括 '.' 和 '..')。

可選的 options 參數可以是指定編碼的字符串,也可以是具有 encoding 屬性的對象,該屬性指定用於傳給回調的文件名的字符編碼。 如果 encoding 設置爲 'buffer',則返回的文件名是 Buffer 對象。

fs.mkdir():

異步地創建目錄。 除了可能的異常,完成回調沒有其他參數。

fs.rmdir():刪除文件夾(詳見node官方文檔)

fs.watch():監聽文件夾變化(詳見node官方文檔)

fs.createReadStream():讀取文件流(詳見node官方文檔)

fs.createWriteStream():寫入文件流(詳見node官方文檔)

util.promisify(original)

讓一個遵循異常優先的回調風格的函數, 即 (err, value) => ... 回調函數是最後一個參數, 返回一個返回值是一個 promise 版本的函數。

例如:

const util = require('util');
const fs = require('fs');

const stat = util.promisify(fs.stat);
stat('.').then((stats) => {
  // Do something with `stats`
}).catch((error) => {
  // Handle the error.
});

或者,使用async function獲得等效的效果:

const util = require('util');
const fs = require('fs');

const stat = util.promisify(fs.stat);

async function callStat() {
  const stats = await stat('.');
  console.log(`This directory is owned by ${stats.uid}`);
}

如果原本就有 original[util.promisify.custom] 屬性, promisify 會返回它的值, 查閱 Custom promisified functions.

promisify() 會在所有情況下假定 original 是一個最後的參數是回調函數的函數,如果它不是,那麼返回的函數的返回值爲 undefined。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章