Node的好處:
1可以和后端有效溝通
2全棧應(yīng)用
3工程化思想
Node.js是什么
是一個異步的事件驅(qū)動的js運行時(runtime就是程序運行的時候)
與前端不同:
JS核心的語法不變,但是操作的對象不同
前端:BOM DOM
后端:fs http buffer events os
nodemon插件:
安裝nodemon 監(jiān)聽node代碼變化的工具攻冷,會自動完成node服務(wù)器和數(shù)據(jù)庫服務(wù)器的重啟
npm install -g nodemon
nodemon使用
nodemon api.js
node的斷點調(diào)試
使用vsc點擊左邊菜單的瓢蟲
選擇
打斷點,點運行,項目里面會多了個json文件,就可以運行到斷點了
內(nèi)置模塊os
獲取內(nèi)存占用率
新建一個api.js文件
//內(nèi)置模塊
const os = require('os')
const mem = os.freemem() / os.totalmem()
console.log(`內(nèi)存占用率${mem.toFixed(2)}%`);
運行代碼
node api.js
第三方模塊download-git-repo插件和ora插件
download-git-repo插件:通過代碼把github的項目clone下來
npm i download-git-repo -s
ora插件:加載中的圈圈
npm i ora -s
使用
//第三方模塊
//異步io處理 從網(wǎng)絡(luò)下載下來 再往文件中寫
const download = require('download-git-repo')
//加進度條
const ora = require('ora')
const process = ora(`下載項目...`)
//轉(zhuǎn)圈圈
process.start()
//第一個參數(shù)是路徑 第二個參數(shù)是下載的文件夾(在同目錄建了個test) 第三個是callback
download('github:su37josephxia/vue-template','test',err =>{
console.log(err ? err : 'Success');
if(err){
process.fail();
}else{
process.succeed();
}
})
promisify 把上面的代碼包裝成promise的方式
上面的寫法是普通寫法 可以再包一層變成promise的用法
async await用于異步串行任務(wù)比較好
//第三方模塊使用
const repo = 'github:su37josephxia/vue-template'
const desc = 'test'
clone(repo,desc)
//異步io處理 從網(wǎng)絡(luò)下載下來 再往文件中寫
async function clone(repo,desc){
//用promise代替callback
//node內(nèi)置模塊
const {promisify} = require('util')
//promisify包一層就可以使用awit語法
const download = promisify(require('download-git-repo'))
//加進度條
const ora = require('ora')
const process = ora(`下載項目...`)
//轉(zhuǎn)圈圈
process.start()
try {
await download(repo,desc)
} catch (error) {
process.fail();
}
process.succeed();
}
自定義模塊
新建文件download.js
還是上面download代碼
//自定義模塊的寫法
//異步io處理 從網(wǎng)絡(luò)下載下來 再往文件中寫
module.exports.clone = async function clone(repo,desc){
//用promise代替callback node內(nèi)置庫
const {promisify} = require('util')
//promisify包一層就可以使用awit語法
const download = promisify(require('download-git-repo'))
//加進度條
const ora = require('ora')
const process = ora(`下載項目...`)
//轉(zhuǎn)圈圈
process.start()
try {
await download(repo,desc)
} catch (error) {
process.fail();
}
process.succeed();
}
然后在api.js調(diào)用
// 第三方模塊使用
const repo = 'github:su37josephxia/vue-template'
const desc = 'test'
const {clone} = require('./download')
clone(repo,desc)
內(nèi)置模塊fs 同步操作和異步操作
//同步操作
const fs = require('fs')
const data = fs.readFileSync('./download.js')
//data是buffer 16進制
console.log(data.toString())
//異步操作
fs.readFileSync('./download.js',(err,data) => {
if(err) throw err
console.log(data.toString())
})
內(nèi)置模塊buffer 二進制處理
//c語言寫的庫
//buffer 處理二進制 用于TCP流 文件系統(tǒng)操作 其他上下文與八位字節(jié)流交互
//創(chuàng)建一個長度為10字節(jié)以0填充的buf
const buf1 = Buffer.alloc(10)
console.log(buf1)
//看a轉(zhuǎn)二進制狀態(tài)
const buf2 = Buffer.from('a')
console.log(buf2,buf2.toString())
//看中文轉(zhuǎn)二進制狀態(tài)
const buf3 = Buffer.from('只能')
console.log(buf3,buf3.toString())
//合并二進制
const buf4 = Buffer.concat([buf2,buf3])
console.log(buf4,buf4.toString())