Node.js入門(上)

Node的好處:

1可以和后端有效溝通
2全棧應用
3工程化思想

Node.js是什么

是一個異步的事件驅動的js運行時(runtime就是程序運行的時候)

與前端不同:

JS核心的語法不變,但是操作的對象不同
前端:BOM DOM
后端:fs http buffer events os

nodemon插件:

安裝nodemon 監(jiān)聽node代碼變化的工具,會自動完成node服務器和數(shù)據(jù)庫服務器的重啟

npm install -g nodemon

nodemon使用

nodemon api.js

node的斷點調試

使用vsc點擊左邊菜單的瓢蟲
選擇


image.png

打斷點,點運行,項目里面會多了個json文件,就可以運行到斷點了

內置模塊os

獲取內存占用率
新建一個api.js文件

//內置模塊
const os = require('os')
const mem = os.freemem() / os.totalmem()
console.log(`內存占用率${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)絡下載下來 再往文件中寫
const download = require('download-git-repo')
//加進度條
const ora = require('ora')
const process = ora(`下載項目...`)
//轉圈圈
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用于異步串行任務比較好

//第三方模塊使用
const repo = 'github:su37josephxia/vue-template'
const desc = 'test'
clone(repo,desc)

//異步io處理 從網(wǎng)絡下載下來 再往文件中寫
async function clone(repo,desc){
    //用promise代替callback 
   //node內置模塊
    const {promisify} = require('util')
    //promisify包一層就可以使用awit語法
    const download = promisify(require('download-git-repo'))
    //加進度條
    const ora = require('ora')
    const process = ora(`下載項目...`)
    //轉圈圈
    process.start()
    try {
        await download(repo,desc)
    } catch (error) {
        process.fail();
    }
    process.succeed();
}
自定義模塊

新建文件download.js
還是上面download代碼


//自定義模塊的寫法
//異步io處理 從網(wǎng)絡下載下來 再往文件中寫
module.exports.clone = async function clone(repo,desc){
    //用promise代替callback node內置庫
    const {promisify} = require('util')
    //promisify包一層就可以使用awit語法
    const download = promisify(require('download-git-repo'))
    //加進度條
    const ora = require('ora')
    const process = ora(`下載項目...`)
    //轉圈圈
    process.start()
    try {
        await download(repo,desc)
    } catch (error) {
        process.fail();
    }
    process.succeed();
}

然后在api.js調用

// 第三方模塊使用
const repo = 'github:su37josephxia/vue-template'
const desc = 'test'
const {clone} = require('./download')
clone(repo,desc)
內置模塊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())
})
內置模塊buffer 二進制處理
//c語言寫的庫
//buffer 處理二進制 用于TCP流 文件系統(tǒng)操作 其他上下文與八位字節(jié)流交互
//創(chuàng)建一個長度為10字節(jié)以0填充的buf
const buf1 = Buffer.alloc(10)
console.log(buf1)
//看a轉二進制狀態(tài)
const buf2 = Buffer.from('a')
console.log(buf2,buf2.toString())
//看中文轉二進制狀態(tài)
const buf3 = Buffer.from('只能')
console.log(buf3,buf3.toString())
//合并二進制
const buf4 = Buffer.concat([buf2,buf3])
console.log(buf4,buf4.toString())
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容