NodeJS踩坑實錄
nodejs的常用api
-
url
主要是配置一系列和路徑相關的資訊
url.parse(urlString[, parseQueryString[, slashesDenoteHost]]) 將一個URL字串解析為URL物件 urlString: 解析的路徑字串 parseQueryString: 返回是布林型別,主要用來解析query的 slashesDenoteHost: 返回是布林型別,當你不確定你的請求協議時,輔助幫助你進行解析 url.format(urlObj,parseObj,slashesObj) 將url物件轉換為字串 與parse引數相反 url.resolve(from, to) 將基礎路徑和字尾路徑轉換成目標路徑 from 解析時相對的基本URL to 要解析的超連結 URL 值得注意的是基本路徑要在路徑最後新增'/',否則合併會找到你最近的'/'並替換 const url = require('url'); url.resolve('/one/two/three', 'four');// '/one/two/four' url.resolve('http://example.com/', '/one');// 'http://example.com/one' url.resolve('http://example.com/one', '/two'); // 'http://example.com/two'
-
queryString
為查詢字串提供擴充套件
querystring 模組提供了一些實用函式,用於解析與格式化 URL 查詢字串 querystring.parse(str,con,seq) str 要解析的 URL 查詢字串 con用於界定查詢字串中的鍵值對的子字串。預設為 '&' seq 用於界定查詢字串中的鍵與值的子字串。預設為 '=' querystring.stringify(obj,con,seq) obj 要序列化成 URL 查詢字串的物件 con 用於界定查詢字串中的鍵值對的子字串。預設為 '&' seq 用於界定查詢字串中的鍵與值的子字串。預設為 '=' querystring.escape(str) 相當於encodeURI 將Asc編碼轉換成utf-8 對給定的str進行 URL編碼 該方法是提供給 querystring.stringify()使用的,通常不直接使用 querystring.unescape(str) 相當於decodeURI 將utf-8轉換成ASc 對給定的str進行解碼 該方法是提供給 querystring.parse()使用的,通常不直接使用
- events - 事件觸發器
大多數 Node.js 核心 API 構建於慣用的非同步事件驅動架構,其中某些型別的物件(又稱觸發器,Emitter)會觸發命名事件來呼叫函式(又稱監聽器,Listener)
當 EventEmitter 物件觸發一個事件時,所有繫結在該事件上的函式都會被同步地呼叫
例子,一個簡單的 EventEmitter 例項,綁定了一個監聽器。 eventEmitter.on() 方法用於註冊監聽器,eventEmitter.emit() 方法用於觸發事件。
const Eventemitter = require("events") class Player extends Eventemitter {} const player = new Player() //使用 eventEmitter.on() 註冊監聽器時,監聽器會在每次觸發命名事件時被呼叫 player.on("change",(track) => { console.log(`node事件機制`,${track}) }) //使用 eventEmitter.once() 可以註冊最多可呼叫一次的監聽器。 當事件被觸發時,監聽器會被登出,然後再呼叫 //player.once("change",(track) => { //console.log(`node事件機制`,${track}) //}) player.emit("change","react") player.emit("change","vue")
- fs - 檔案系統
fs 模組提供了一些介面用於以一種類似標準 POSIX 函式的方式與檔案系統進行互動
所有的檔案系統操作都有同步和非同步兩種形式
非同步形式的最後一個引數都是完成時的回撥函式。 傳給回撥函式的引數取決於具體方法,但回撥函式的第一個引數都會保留給異常。 如果操作成功完成,則第一個引數會是 null 或 undefined
fs.Stats
類
fs.Stats 物件提供了一個檔案的資訊
stats.isDirectory() 如果 fs.Stats 物件表示一個檔案系統目錄,則返回 true
stats.isFile() 如果 fs.Stats 物件表示一個普通檔案,則返回 true
fs.mkdir(path[, options], callback)
非同步地建立目錄。 完成回撥只有一個可能的異常引數
// 建立 /temp/a/apple 目錄,不管 `/temp` 和 /temp/a 目錄是否存在。 fs.mkdir('/temp/a/apple', (err) => { if (err) throw err; });
fs.writeFile(file, data[, options], callback)
非同步地寫入資料到檔案,如果檔案已經存在,則覆蓋檔案。 data 可以是字串或 buffer
fs.writeFile('temp.js', 'keep study', (err) => { if (err) throw err; console.log('檔案已儲存!'); });
fs.appendFile(path, data[, options], callback)
非同步地追加資料到檔案,如果檔案不存在則建立檔案。 data 可以是字串或 Buffer
fs.appendFile('temp.js', '追加的資料', (err) => { if (err) throw err; console.log('資料已追加到檔案'); });
fs.readFile(path[, options], callback)
非同步地讀取一個檔案的全部內容
fs.readFile('/etc/passwd', (err, data) => { if (err) throw err; console.log(data); });
回撥有兩個引數 (err, data),其中 data 是檔案的內容。
如果未指定字元編碼,則返回原始的 buffer。
如果 options 是一個字串,則它指定了字元編碼。例子:
fs.readFile('/etc/passwd', 'utf8', callback);
fs.readdir(path[, options], callback)
讀取目錄的內容。 回撥有兩個引數 (err, files),其中 files 是目錄中檔名的陣列,不包含 '.' 和 '..'。
options 引數用於傳入回撥的檔名。 它可以是一個字串,指定字元編碼。 也可以是一個物件,其中 encoding 屬性指定字元編碼。 如果 encoding 設為 'buffer',則返回的檔名會是 Buffer 物件。
fs.rmdir(path, callback)
刪除目錄
fs.readFileSync(path[, options])
同步讀取檔案
fs.readdirSync(path[, options])
同步讀取目錄
fs.unlink(path, callback)
解除關係(也即刪除檔案)
readFileSync和unlink結合實現刪除一個目錄及其目錄下的檔案的例子:
const fs = require('fs'); fs.readdirSync("logs").map((file) => { fs.unlink(`logs/${file}`,() => { console.log("刪除成功") }) }) fs.rmdir("logs", (err)=> { console.log("確定要刪除嗎?") })