node小記

聶一發表於2020-12-04

Buffer緩衝區

通俗點來說就是一個暫時儲存使用者傳送的請求資訊,和伺服器未發現響應之前的響應資訊,內部已二進位制儲存但是以十六進位制顯示。
在這裡插入圖片描述

fs檔案系統(File System)

就是node通過引用fs模組對電腦裡面的檔案可以進行一系列增刪改的操作等。如果筆記有榮幸被網上的兄弟看到,那這裡把模組的引入講一下,就是 cosnt fs = require('fs'),node引入檔案就是這樣require後面跟需要引入的模組名字,如果是引入自己建立的模組,那填寫的就是相對路徑,npm下載的模組也是隻要填名字就可以了。fs裡面的方法分為同步和非同步,同步會卡主程式的執行,等我這步執行完了才能執行後面,非同步就是程式先按順序執行下去,等我fs這步執行完了,再執行一個回撥函式
同步

const fs = require('fs')
//引入fs模組
const fa = fs.openSync('hello.txt','w')
//同步開啟hello.txt檔案,這裡寫相對路徑,第二個位置寫許可權
fs.writeSync(fa,'我giaoi1',20)
//同步寫入檔案,第一個是檔案標識,第二個是檔案內容,第三個是內容前幾個空格
fs.closeSync(fa)
//同步關閉檔案

非同步

const fs = require('fs')
//非同步步驟是一樣的但是每個api執行完都要有一個回撥函式,函式第一個引數都是錯誤,接著在回撥函式中進行下一步操作
fs.open('hello.txt','w',(err,fd)=>{
//這裡第二個引數返回的是檔案識別符號
    if(!err){
        fs.write(fd,'非同步寫入一些東西',(err)=>{
            if(!err){
                fs.close(fd,(err)=>{
                    if(!err){
                        console.log('檔案關閉成功');
                    }
                })
            }
        })
    }
})

簡單寫入

//非同步
const fs =require('fs')

fs.writeFile('hello.txt','簡單寫入',(err)=>{
    if(!err){
        console.log('寫入完成');
    }
})
//同步
fs.writeFileSync('hello.txt','簡單寫入同步')

檔案寫入預設一般是直接覆蓋原有的內容,需要在引數最後改變開啟狀態
在這裡插入圖片描述

fs.writeFileSync('hello.txt','簡單寫入同步追加',{flag:'a'})

流式檔案寫入
可以分多次寫入檔案,而不用像傳統一樣一次性寫入所有

const fs = require('fs')
const w = fs.createWriteStream('hello.txt')
w.write('wogiao')
w.write('wogiao')
w.write('wogiao')
w.write('wogiao')
w.end()

簡單檔案讀取
只能讀取出buffer的形式是因為讀取的檔案樣式是多種多樣的,如果要檢視字串檔案的內容可以用toString的方法轉化為字串,非同步的方法是將資料返回到回撥函式的第二個引數中,同步則是以返回值的形式返回

const fs = require('fs')

fs.readFile('wife.jpg',(err,data)=>{
    if(!err){
        console.log(data);
        fs.writeFile('hello.txt',data,(err)=>{
                if(!err){
                    console.log('寫入圖片成功');
                }
        })
    }
})

流式檔案讀取
這裡直接流式檔案讀取並且通過建立一條管子,一邊讀取資料一邊往另一個檔案寫入資料

const fs = require('fs')
const ws = fs.createWriteStream('hello.txt')
const rs = fs.createReadStream('wife.jpg')
rs.pipe(ws)

fs的其他方法

const bol = fs.existsSync(path)
//檢查一個檔案存不存在,非同步的方法已經廢除,因為檢視檔案本來就是一個很快的事情沒必要用非同步,返回一個Boolean
const state = fs.statSync(path)
//返回一個狀態資訊物件,裡面有檔案的大小,建立時間等
fs.stat(path,(err,state)=>{
})
//將狀態資訊物件返回到第二個引數中
//返回的物件還包含很多方法,例如:state.isFile() //是否是一個檔案
// state.isDirectory //是否是一個資料夾或者目錄
fs.unlink(path,callback)
fs.unlinkSync(path)
//直接刪除檔案
fs.readdir(path,(err,files)=>{})
//fiels是一個陣列,裡面是該目錄下的所有檔案
fs.readdirSync(path)
//讀取目錄的目錄結構
fs.truncate(path,length)
//擷取檔案,擷取該檔案前面固定length
fs.truncate(path,length)
fs.mkdir(path,callback)
fs.mkdirSync(path)
//建立一個資料夾
fs.rmdir(path,callback)
fs.rmdirSync(path)
//建立一個資料夾
fs.rename(oldpath,newpath,callback)
fs.renameSync(oldpath,newpath)
//重新命名檔案
fs.watchFile(path[,options],listener)
fs.watchFile(path[,options],(curr,prev)=>{
	//接受兩個引數,一個是當前檔案狀態,一個是修改前檔案的狀態,這兩個引數都是stats物件,也有size,isFile()等
})
//lisener是一個回撥函式,等監聽的檔案發生變化的時候執行
//它其實是一個定時機制,每間隔一段時間就會去檢查檔案是否發生變化
//option裡面可以設定一個interval時間間隔,一般option都是一個物件

相關文章