【前端目錄貼】
參考視頻: 尚硅谷Node.js零基礎(chǔ)視頻教程,nodejs新手到高手
1.基礎(chǔ)
1.1. 基礎(chǔ)命令
-
node -v
查看版本號 -
node hello.js
運(yùn)行js文件
1.2. 注意事項
Node.js中不能使用
BOM
和DOM
的API
console.log('hello world');
console.log(window);//報錯
console.log(document);//報錯
說明:瀏覽器中的javascript語法包括如下內(nèi)容組成部分
node.js語法的組成部分
2. Buffer(緩沖器)介紹與創(chuàng)建
2.1 概念
- Buffer 是一個類似于數(shù)組的
對象
,用于表示固定長度的字節(jié)序列- Buffer 本質(zhì)是一段內(nèi)存空間,專門用來處理
二進(jìn)制數(shù)據(jù)
。
2.2 特點(diǎn)
- Buffer 大小固定且無法調(diào)整
- Buffer 性能較好,可以直接對計算機(jī)內(nèi)存進(jìn)行操作
- 每個元素的大小為 1 字節(jié)(byte)
2.3 使用
- 創(chuàng)建 Buffer
Node.js 中創(chuàng)建 Buffer 的方式主要如下幾種
- Buffer.alloc
- Buffer.allocUnsafe
- Buffer.from
// 創(chuàng)建了一個長度為 10 字節(jié)的 Buffer,相當(dāng)于申請了 10 字節(jié)的內(nèi)存空間,每個字節(jié)的值為 0
let buf_1 = Buffer.alloc(10) //=>結(jié)果為<Buffer 00 00 00 00 00 00 00 00 00 00>
//創(chuàng)建了一個長度為 10 字節(jié)的 Buffer,buffer 中可能存在舊的數(shù)據(jù), 可能會影響執(zhí)行結(jié)果,所以叫unsafe
let buf_2 = Buffer.allocUnsafe(10);
//通過字符串創(chuàng)建 Buffer
let buf_3 = Buffer.from('hello');
//通過數(shù)組創(chuàng)建 Buffer
let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);
- Buffer 與字符串的轉(zhuǎn)化
toString
方法將 Buffer 轉(zhuǎn)為字符串 (toString 默認(rèn)是按照 utf-8 編碼方式進(jìn)行轉(zhuǎn)換的。)
let buf_4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117]);
console.log(buf_4.toString())
- Buffer 的讀寫
Buffer 可以直接通過 [] 的方式對數(shù)據(jù)進(jìn)行處理。
注意:
如果修改的數(shù)值超過255
,則超過 8 位數(shù)據(jù)會被舍棄
一個 utf-8 的中文字符一般
占 3 個字節(jié)
//讀取
console.log(buf_3[1]);
//修改
buf_3[1] = 97;
//查看字符串結(jié)果
console.log(buf_3.toString());
3. fs模塊(file system)
fs 全稱為 file system
,稱之為 文件系統(tǒng)
,是 Node.js 中的 內(nèi)置模塊
,可以對計算機(jī)中的磁盤進(jìn)行操
作。
3.1 文件寫入
文件寫入就是將
數(shù)據(jù)
保存到文件
中,我們可以使用如下幾個方法來實(shí)現(xiàn)該效果
方法 | 說明 |
---|---|
writeFile | 異步寫入 |
writeFileSync | 同步寫入 |
appendFile / appendFileSync | 追加寫入 |
createWriteStream | 流式寫入 |
- writeFile 異步寫入
語法:
fs.writeFile(file, data[, options], callback)
參數(shù)說明:
- file 文件名
- data 待寫入的數(shù)據(jù)
- options 選項設(shè)置 (可選)
- callback 寫入回調(diào)
返回值:
undefined
// require 是 Node.js 環(huán)境中的'全局'變量,用來導(dǎo)入模塊
var fs = require('fs');
// 參數(shù)說明:
// file 文件名
// data 待寫入的數(shù)據(jù)
// options 選項設(shè)置 (可選)
// callback 寫入回調(diào)
fs.writeFile('./fileBak/aa.txt','三人行',err => {//不存在,則創(chuàng)建
//如果寫入失敗,則調(diào)用回調(diào)函數(shù),會傳入錯誤對象,如寫入成功,會傳入null
if (err) {
console.log(err);
return;
}
console.log('寫入成功');
});
- writeFileSync同步寫入
語法:
fs.writeFileSync(file, data[, options])
參數(shù)與 fs.writeFile 大體一致,只是沒有 callback 參數(shù)
返回值:undefined
// require 是 Node.js 環(huán)境中的'全局'變量,用來導(dǎo)入模塊
var fs = require('fs');
// 參數(shù)說明:
// file 文件名
// data 待寫入的數(shù)據(jù)
// options 選項設(shè)置 (可選)
fs.writeFileSync('./fileBak/bb.txt','三人行');
console.log('寫入完成')
Node.js 中的磁盤操作是由其他 線程 完成的,結(jié)果的處理有兩種模式:
同步處理
JavaScript 主線程 會等待 其他線程的執(zhí)行結(jié)果,然后再繼續(xù)執(zhí)行主線程的代碼,
效率較低異步處理
JavaScript 主線程 不會等待 其他線程的執(zhí)行結(jié)果,直接執(zhí)行后續(xù)的主線程代碼,
效率較好
- appendFile / appendFileSync追加寫入
appendFile
作用是在文件尾部追加內(nèi)容,appendFile
語法與writeFile
語法完全相同
語法:fs.appendFile(file, data[, options], callback)
fs.appendFileSync(file, data[, options])
返回值: 二者都為undefined
// require 是 Node.js 環(huán)境中的'全局'變量,用來導(dǎo)入模塊
// require 是 Node.js 環(huán)境中的'全局'變量,用來導(dǎo)入模塊
var fs = require('fs');
// 參數(shù)說明:
// file 文件名
// data 待寫入的數(shù)據(jù)
// options 選項設(shè)置 (可選)
// callback 寫入回調(diào)
for (let i = 0; i < 10; i++) {
// fs.appendFile('./fileBak/aa.txt','三人行',err => {//不存在,則創(chuàng)建,異步追加
fs.appendFileSync('./fileBak/aa.txt','三人行');
}
console.log(1)
- createWriteStream流式寫入
語法:
fs.createWriteStream(path[, options])
參數(shù)說明:
- path 文件路徑
- options 選項配置(
可選
)- 返回值:
Object
// require 是 Node.js 環(huán)境中的'全局'變量,用來導(dǎo)入模塊
var fs = require('fs');
// 參數(shù)說明:
// file 文件名
// options 選項設(shè)置 (可選)
var ws = fs.createWriteStream('./fileBak/cc.txt');
ws.write('11');
ws.write('22');
ws.end();
console.log(1)
程序打開一個文件是需要消耗資源的
,流式寫入可以減少打開關(guān)閉文件的次數(shù)。
流式寫入方式適用于大文件寫入或者頻繁寫入
的場景, writeFile 適合于寫入頻率較低的場景
3.2 文件讀取
文件讀取顧名思義,就是通過程序從文件中取出其中的數(shù)據(jù),我們可以使用如下幾種方式
方法 | 說明 |
---|---|
readFile | 異步讀取 |
readFileSync | 同步讀取 |
createReadStream | 流式讀取 |
- readFile 異步讀取
語法:
fs.readFile(path[, options], callback)
參數(shù)說明:
- path 文件路徑
- options 選項配置
- callback 回調(diào)函數(shù)
- 返回值:
undefined
var fs = require('fs');
fs.readFile('./fileBak/aa.txt',(err,data) => {
if (err) {
throw err
}
console.log(data);
})
fs.readFile('./fileBak/aa.txt','utf-8',(err,data) => {
if (err) {
throw err
}
console.log(data);
})
- readFileSync 同步讀取
語法:
fs.readFileSync(path[, options])
參數(shù)說明:
path 文件路徑
options 選項配置
返回值:string | Buffer
var fs = require('fs');
var data1 = fs.readFileSync('./fileBak/aa.txt');
console.log(data1)
var data2 = fs.readFileSync('./fileBak/aa.txt','utf-8');
console.log(data2)
- createReadStream 流式讀取
語法:
fs.createReadStream(path[, options])
參數(shù)說明:
- path 文件路徑
- options 選項配置(
可選
)- 返回值:
Object
var fs = require('fs');
var readStream = fs.createReadStream('./fileBak/aa.txt','utf-8');
readStream.on('data',data3=>{
console.log(data3)
console.log(data3.length)
});
//讀取完畢后,執(zhí)行end回調(diào)
readStream.on('end',()=>{
console.log('讀取完后');
})
3.3 文件移動與重命名
在 Node.js 中,我們可以使用
rename
或 renameSync` 來移動或重命名 文件或文件夾
語法:
fs.rename(oldPath, newPath, callback)
fs.renameSync(oldPath, newPath)
參數(shù)說明:
- oldPath 文件當(dāng)前的路徑
- newPath 文件新的路徑
- callback 操作后的回調(diào)(同步)
var fs = require('fs');
fs.rename('./fileBak/aa.txt','./fileBak/aa2.txt',err => {
if(err) throw err;
console.log('移動完成');
});
var fs = require('fs');
fs.renameSync('./fileBak/aa2.txt','./fileBak/aa.txt');
3.4 文件刪除
在 Node.js 中,我們可以使用 unlink 或 unlinkSync 來刪除文件
語法:
fs.unlink(path, callback)
fs.unlinkSync(path)
參數(shù)說明:
- path 文件路徑
- callback 操作后的回調(diào)
var fs = require('fs');
fs.unlink('./fileBak/aa.txt',err => {
if(err) throw err;
console.log('刪除完成');
});
var fs = require('fs');
fs.unlinkSync('./fileBak/aa.txt');
3.5 文件夾操作
借助 Node.js 的能力,我們可以對文件夾進(jìn)行 創(chuàng)建
、 讀取
、 刪除
等操作
方法 | 說明 |
---|---|
mkdir / mkdirSync | 創(chuàng)建文件夾 |
readdir / readdirSync | 讀取文件夾 |
rmdir / rmdirSync | 刪除文件夾 |
- mkdir / mkdirSync 創(chuàng)建文件夾
在 Node.js 中,我們可以使用
mkdir
或mkdirSync
來創(chuàng)建文件夾
語法:
fs.mkdir(path[, options], callback)
fs.mkdirSync(path[, options])
參數(shù)說明:
- path 文件夾路徑
- options 選項配置( 可選 )
- callback 操作后的回調(diào)
var fs = require('fs');
fs.mkdir('./fileBak/cc',err => {//如果存在會報錯
if(err) throw err;
console.log('創(chuàng)建成功');
})
var fs = require('fs');
fs.mkdirSync('./fileBak/bbD');
var fs = require('fs');
//異步遞歸創(chuàng)建文件夾
fs.mkdir('./fileBak/1/2/3',{recursive:true},err => {
if (err) {
throw err;
}
console.log('同步遞歸創(chuàng)建文件夾');
});
var fs = require('fs');
//同步遞歸創(chuàng)建文件夾
fs.mkdirSync('./fileBak/1/2/3',{recursive:true});
- readdir / mkdirSync 讀取文件夾
在 Node.js 中,我們可以使用 readdir 或 readdirSync 來讀取文件夾
語法:
fs.readdir(path[, options], callback)
fs.readdirSync(path[, options])
參數(shù)說明:
- path 文件夾路徑
- options 選項配置( 可選 )
- callback 操作后的回調(diào)
var fs = require('fs');
fs.readdir('./fileBak/1',(err,data) => {
if (err) {
throw err;
}
console.log(data);
});
var fs = require('fs');
var data = fs.readdirSync('./fileBak/1');
console.log(data)
- rmdir / mkdirSync 刪除文件夾
在 Node.js 中,我們可以使用 rmdir 或 rmdirSync 來刪除文件夾
語法:
fs.rmdir(path[, options], callback)
fs.rmdirSync(path[, options])
參數(shù)說明:
- path 文件夾路徑
- options 選項配置( 可選 )
- callback 操作后的回調(diào)
var fs = require('fs');
//異步刪除文件夾
// fs.rmdir('./fileBak/cc', err => {
// if(err) throw err;
// console.log('刪除成功');
// });
//異步遞歸刪除文件夾
fs.rmdir('./fileBak/1', {recursive: true}, err => {
if(err) {
console.log(err);
}
console.log('遞歸刪除')
});
3.6 查看資源狀態(tài)
在 Node.js 中,我們可以使用 stat 或 statSync 來查看資源的詳細(xì)信息
語法:
fs.stat(path[, options], callback)
fs.statSync(path[, options])
參數(shù)說明:
- path 文件夾路徑
- options 選項配置( 可選 )
- callback 操作后的回調(diào)
var fs = require('fs');
//異步獲取狀態(tài)
// fs.stat('./fileBak/aa.txt', (err, data) => {
// if(err) throw err;
// console.log(data);
// });
//同步獲取狀態(tài)
let data = fs.statSync('./fileBak/aa.txt');
console.log(data)
3.7 相對路徑問題
fs 模塊對資源進(jìn)行操作時,路徑的寫法有兩種:
- 相對路徑
*
./座右銘.txt
當(dāng)前目錄下的座右銘.txt*
座右銘.txt
等效于上面的寫法*
../座右銘.txt
當(dāng)前目錄的上一級目錄中的座右銘.txt- 絕對路徑
*
D:/Program Files
windows 系統(tǒng)下的絕對路徑*
/usr/bin Linux
系統(tǒng)下的絕對路徑
相對路徑中所謂的
當(dāng)前目錄
,指的是命令行的工作目錄
,而并非是文件的所在目錄
所以當(dāng)命令行的工作目錄與文件所在目錄不一致時,會出現(xiàn)一些 BUG文章來源:http://www.zghlxwxcb.cn/news/detail-823648.html
3.8 __dirname
__dirname
與require
類似,都是 Node.js 環(huán)境中的’全局’變量,__dirname
保存著 當(dāng)前文件所在目錄的絕對路徑 ,可以使用 __dirname 與文件名拼接成絕對路徑let data = fs.readFileSync(__dirname + '/data.txt');
文章來源地址http://www.zghlxwxcb.cn/news/detail-823648.html
3.9 練習(xí)復(fù)制文件腳本
var fs = require('fs');
fs.readFile('./fileBak/1.png', (err, data) => {
if (err) {
throw err;
return;
}
console.log('開始讀取....')
fs.writeFile('./fileBak/2.png', data, err => {
if (err) {
throw err;
return;
}
console.log('開始導(dǎo)出...');
console.log('結(jié)束導(dǎo)出...');
})
console.log('結(jié)束讀取....')
});
// fs.writeFile('./fileBak/2.png', 'f', err => {
// if (err) {
// throw err;
// return;
// }
// console.log('開始導(dǎo)出...');
// console.log('結(jié)束導(dǎo)出...');
// })
到了這里,關(guān)于【前端】尚硅谷Node.js零基礎(chǔ)視頻教程筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!