天天看點

Node.js

1.Node.js概述

 Node.js是運作在伺服器端的環境

 (1)對比JS

  JS運作在用戶端浏覽器,存在多種浏覽器,存在相容性問題;Node.js運作在伺服器端,隻有V8引擎一種解釋器,代碼不存在相容性問題。

  兩者都有共同的自定義對象和内置對象(ES對象),不同的宿主對象

  JS用于操作浏覽器的内容,實作使用者互動,Node.js用于伺服器端開發,例如操作資料庫,調用其它伺服器

 (2)運作方式

  腳本模式

    node  拖拽檔案    回車

  互動模式

    node    回車  進入互動模式

    退出互動模式    兩次ctrl+c, ctrl+d

 (3)特點

  屬于單線程運作邏輯,不會産生死鎖,支援數萬個并發連接配接,适合做基于社交網絡的大規模WEB應用

  不适合做CPU密集型應用

2.全局對象

 (1)global

  檢測變量或者函數是否為全局的

  在Node.js的互動模式下,屬于全局作用域

  在腳本檔案下,不屬于全局作用域

 js下global名稱為window

  (2)console對象

  提供了一組用于調試控制台的方法

  console.log(1); //輸出日志

  console.info(2); //輸出消息

  console.warn(3); //輸出警告

  console.error(4); //輸出錯誤

  console.time()   開始計時

  console.timeEnd()   結束計時

  開始計時和結束計時兩者輸出的值要保持一緻

  (3)process對象

  程序:在計算機上開啟的任何軟體都代表程序

  process.arch   檢視目前CPU架構

  process.platform   檢視目前的作業系統

  process.version  檢視目前Node.js的版本号

  process.pid   檢視目前的程序編号

  process.kill()   結束指定編号的程序

 (4)Buffer對象

  緩沖區,緩沖存儲器

  是記憶體中的一塊臨時存儲資料的區域

  var buf=Buffer.alloc(5, 'abcde');//建立buffer,配置設定空間大小為5個位元組,并存儲資料

  buf.toString()  //将buffer轉為字元串

 Node.js下每個漢字占三個位元組

1.子產品

require: 是一個函數,用于引入其他子產品

module.exports: 導出的對象,預設是一個空對象要暴露的内容需要添加到對象中

__dirname:  擷取目前子產品的絕對路徑

__filename: 擷取目前子產品的絕對路徑+子產品名稱

2.子產品的分類

子產品分為三種:自定義子產品、核心子產品、第三方子產品

                 以路徑開頭                                                                                     不以路徑開頭

檔案形式子產品      require('./circle.js')                                                                   require('querystring')

                 常用于引入自定義子產品                                                                      用于引入官方提供核心子產品           

目錄形式         require('./demo-01.js')                                                                   require('tao')

 首先會找到目錄下查找package.json 檔案中main 對應的檔案,果 找不到自動查找01.js                 首先會到目前目錄下的node_modules目中尋找tao目錄,用于引入第三方子產品                                                                        如果找不到會一直往上一級目錄的node_modules目錄中尋找

3.包的npm

 包:指的是第三方子產品,是一個目錄子產品

 npm:用來管理包的工具子產品,屬于是第三方子產品,在Node.js安裝時候已經附帶安裝

    npm  -v  檢視npm版本

 CommonJS:是一種規範,制定了Node.js的子產品規範

 網址: www.npmjs.com

 (1)切換指令行路徑

   在要進入的目錄的空白區域,按住shift,單擊滑鼠右鍵,選擇“在此處打開powershell視窗”

  在cmd下

     cd  粘貼路徑

     如果有盤符的切換,需要添加  盤符名稱:

(2)npm指令

npm init -y 初始化一個package.json檔案,記錄下載下傳安裝的包 

npm install 包名稱 下載下傳安裝指定的包,會将包放入到目前目錄的 node_modules 目錄下,如果不存在會自動建立;同時會生成 package-lock.json 的檔案用于記錄所有包的版本号,package.json中隻是記錄目前安裝包的安裝資訊

npm install  自動下載下傳package.json 和 package-lock.json中記錄的包

4.查詢字元串子產品(querystring)

查詢字元串:浏覽器向伺服器傳遞資料的一種方式,位于網址中

http://search.jd.com/Search?keyword=筆記本&price=4000

協定     域名或者IP    字元串查詢

查詢字元串子產品:專門用于操作查詢字元串的工具

parse()   将查詢對象解析為對象

5.url

統一資源定位,網際網路上的任何的資源(html.css.js,js,圖像,視訊,聲音)都有相應的URL

http://www.codeboy.com:9999/product_details.html?lid=13#one

協定   域名或者IP位址   端口  檔案在伺服器的路徑  查詢字元串  錨點

6.定時器子產品(timer)

(1)一次性定時器

開啟

let timer=setTimerout(回調函數,間隔時間)

當間隔時間到了,會調用一次回調函數,間隔時間機關是毫秒

清除

clearTimeout(timer)

(2)周期性定時器

let timer=setlnterval(回調函數,間隔時間)

每隔一段時間,調用一次回調函數

clearinterval(timer)

(3)立即執行定時器

var timer=setlmmediate(回調函數)

clearlmmediate(timer)

process.nextTick(回調函數)

沒有清除

定時器的回調函數是在事件隊列中執行,當程式執行完才會執行事件隊列的回調函數

Node.js

1.同步和異步

同步:在主程式中執行,會阻止主程式中後續代碼的執行,通過傳回值擷取結果

異步:在一個獨立的線程中執行,不會阻止主程式後續代碼的執行,通過回調函數擷取結果

2.檔案系統子產品 (fs)

檔案分為目錄形式和檔案形式

(1)檢視檔案狀态

 statSync(檔案的路徑)  / stat(檔案的路徑,回調函數);

 isDirectory()  是否為目錄

 isFile()       是否為檔案

(2)建立目錄

mkdirSync(檔案的路徑)/mkdir(檔案的路徑,回調函數)

(3)移除目錄

rmdirSync(檔案路徑) /rmdir(檔案的路徑,回調函數)

隻允許移除空目錄

(4)讀取目錄

readdirSync(檔案路徑)/readdir(檔案路徑,回調函數)

(5)清空寫入檔案

writeFileSync(檔案的路徑,寫入的資料)/writeFile(檔案的路徑,回調函數)

(6)追加寫檔案

appendFileSync(檔案的路徑,寫入的資料) /appendFile (檔案的路徑,回調函數)

如果檔案不存在,首先建立檔案然後寫入資料

如果檔案存在,會在檔案的末尾追加寫入資料

(7)讀取檔案

readfileSync(檔案的路徑)/readfile(檔案的路徑,回調函數)

(8)删除檔案

unlinkSync(檔案的路徑)/unlink(檔案路徑,回調函數)

(9)檢測檔案是否存在

existsSync(檔案的路徑) 存在 return  true  不存在 return  false

(10)拷貝一個檔案

copyFileSync(原檔案路徑,目标檔案路徑)/ copyFile(原檔案路徑,目标檔案路徑,回調函數)

3.檔案流

creatReadStream()  建立可讀取的檔案流

creatWriteStream()  建立可寫入的檔案流

on(事件名稱,回調函數) 一旦觸發事件,自動調用回調函數,其中事件名稱是固定的字元串形式

pipe()  管道,可以将讀取的流添加到寫入的流

4.http 協定

http:超文本傳輸協定

是浏覽器和WEB伺服器之間的通信協定

(1)通用頭資訊(general)

Request URL:請求的URL,要請求資源

Request Method:請求的方法,對資源操作的方式 get post....

Status Code :響應狀态碼

1**:已經接受到了部分請求,還沒結束

2**:成功響應

3**:響應的重定向,發生跳轉

4**:用戶端錯誤

5**:伺服器錯誤

(2)響應頭資訊(response)

Location:要跳轉的URL通常結合狀态3**使用

Content-type:響應的内容類型,可以解決中文亂碼

text/html; charset=utf-8

(3)請求頭資訊(request)

(4)請求主體

隻有在傳遞資料的時候才會出現

5.http子產品

可以用來WEB建立伺服器

WEB伺服器:給用戶端提供資源的伺服器例如資料檔案...

   建立WEB伺服器

const app=http.createServer();

   設定端口

app.listen(8080,()=>{

    console.log('WEB伺服器啟動成功')

});

 添加事件,通過事件接受請求做出響應

 app.on('request',(req,res)=>{

     req 請求對象

     req.url擷取請求的URL ,格式 '/xxxx'

     req.method 擷取請求方法

     res 響應的對象

     res.writeHead() 設定相應到浏覽器

     res.end() 結束并發送響應

 })

繼續閱讀