溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Node.js有什么作用

發(fā)布時(shí)間:2021-12-03 14:26:49 來源:億速云 閱讀:232 作者:小新 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)Node.js有什么作用,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

一、歡迎進(jìn)入Node.js世界

1.DIRT(data-intensive real-time)表示數(shù)據(jù)密集型實(shí)時(shí)程序。因?yàn)镹ode自身在I/O上非常輕量,它善于將數(shù)據(jù)從一個(gè)管道混排或代理到另一個(gè)管道上,這能在處理大量請(qǐng)求時(shí)持有很多開放的鏈接,并且只占用一小部分內(nèi)存。它的設(shè)計(jì)目標(biāo)是保證響應(yīng)能力。

二、構(gòu)建有多個(gè)房間的聊天室程序

1.事件發(fā)射器:是跟某種資源相關(guān)聯(lián)的,它能向這個(gè)資源發(fā)送消息,也能從這個(gè)資源接收消息。資源可以連接遠(yuǎn)程服務(wù)器,或者更抽象的東西,比如游戲中的角色

三、Node編程基礎(chǔ)

A.Node功能的組織及重用

1.Node模塊允許你從被引入文件中選擇要暴露給程序的函數(shù)和變量。如果模塊返回的函數(shù)或變量不止一個(gè),那它可以通過設(shè)定exports對(duì)象的屬性來指明它們。但如果模塊只返回一個(gè)函數(shù)或變量,則可以設(shè)定module.exports屬性

2.require以你要用的模塊路徑為參數(shù),以同步的方式尋找它,定位到這個(gè)模塊并加載文件中的內(nèi)容,是Node中少數(shù)幾個(gè)同步I/O操作之一,不要在I/O密集的地方使用

3.module.exports可以對(duì)外提供單個(gè)變量、函數(shù)或者對(duì)象,如果創(chuàng)建了一個(gè)既有exports又有module.exports的模塊,那它會(huì)返回module.exports,而exports會(huì)被忽略

B.異步編程技術(shù)

1.兩種響應(yīng)編輯管理方式:回調(diào)和事件監(jiān)聽

  • 回調(diào)通常用來定義一次性響應(yīng)的邏輯,它被當(dāng)做參數(shù)傳給異步函數(shù),描述了異步操作完成之后要做什么

  • 事件監(jiān)聽器,本質(zhì)上也是一個(gè)回調(diào),不同的是,它跟一個(gè)概念實(shí)體(事件)相關(guān)聯(lián)。

2.一個(gè)Node HTTP服務(wù)器實(shí)例就是一個(gè)事件發(fā)射器,一個(gè)可以繼承、能夠添加事件發(fā)射及處理能力的類(EventEmitter)

3.回調(diào)時(shí)盡早從函數(shù)中返回。Node中大多數(shù)內(nèi)置模塊在使用回調(diào)時(shí)都會(huì)帶有兩個(gè)參數(shù):一個(gè)是用來放可能會(huì)發(fā)生的錯(cuò)誤,另一個(gè)是放結(jié)果的

4.事件發(fā)射器會(huì)觸發(fā)事件,并且在那些事件被觸發(fā)時(shí)能處理它們。

5.在創(chuàng)建異步程序時(shí),你必須密切關(guān)注程序的執(zhí)行流程:事件輪詢的條件、程序變量,以及其他隨著程序邏輯執(zhí)行而發(fā)生變化的資源

C.異步邏輯的順序化

1.讓一組異步任務(wù)順序執(zhí)行的概念被稱為流程控制。分為:

  • 串行:需要一個(gè)接著一個(gè)做的任務(wù)

  • 并行:不需要一個(gè)接著一個(gè)做的任務(wù)

四、構(gòu)建Node Web程序

A.HTTP服務(wù)器的基礎(chǔ)知識(shí)

1.在結(jié)束響應(yīng)之前 ,你可以在請(qǐng)求的生命期內(nèi)運(yùn)行任何你想運(yùn)行的異步邏輯。如果你沒能結(jié)束響應(yīng),請(qǐng)求會(huì)掛起,直到客戶端超時(shí)或一直處于打開狀態(tài)

B.構(gòu)建RESTful Web服務(wù)

1.Buffer.byteLength(),字節(jié)長(zhǎng)度,Content-Length應(yīng)該是字節(jié)長(zhǎng)度

C.提供靜態(tài)文件服務(wù)

1.*.pipe()管道

五、存儲(chǔ)Node程序中的數(shù)據(jù)

A.無服務(wù)器的數(shù)據(jù)存儲(chǔ)

1.內(nèi)存存儲(chǔ):存放少量經(jīng)常使用的數(shù)據(jù)

2.基于文件的存儲(chǔ):用文件系統(tǒng)存放數(shù)據(jù),有并發(fā)問題

六、Connect

1.Connect中有一個(gè)掛載的概念,可以給中間件或整個(gè)程序定義一個(gè)路徑前綴

2.構(gòu)建中間件時(shí),你應(yīng)該關(guān)注那些小型的、可配置的部分。構(gòu)建大量微小的、模塊化的、可重用的中間件組件來搭成你的程序。保持中間件的小型化和專注性有助于將復(fù)雜的程序邏輯分解 成更小的組成部分

七、Connect自帶的中間件

1.解析cookie、請(qǐng)求主體和查詢字符串的中間件:cookieParser()bodyParser()、limit()、query()

2.實(shí)現(xiàn)Web程序核心功能的中間件:logger()、favicon()、methodOverride()、host()、session()

3.會(huì)話對(duì)象在各個(gè)請(qǐng)求間會(huì)被串行化為JSON對(duì)象:不允許循環(huán)屬性,不能用函數(shù)對(duì)象,Date對(duì)象無法正確串行化等

4.處理Web程序安全的中間件:basicAuth()、csrf()、errorHandler()

5.提供靜態(tài)文件服務(wù)的中間件:static()、compress()、directory()

*大部分已經(jīng)不是自帶的了,參考:

https://github.com/senchalabs/connect

https://github.com/expressjs/basic-auth-connect

八、Express

1.Node中的__dirname用來確定當(dāng)前運(yùn)行的文件所在的目錄

2.*express全局命令安裝:sudo npm install -g express-generator(4.x以后)

九、Express進(jìn)階

1.Node是單線程的,沒有線程本地存儲(chǔ)。對(duì)于HTTP服務(wù)器而言,請(qǐng)求和響應(yīng)變量是唯一的上下文對(duì)象

十、測(cè)試Node程序

1.單元測(cè)試:

  • TDD:Mocha、nodeunit、assert模塊

  • BDD:Mocha、Vows、should.js

2.驗(yàn)收測(cè)試也被稱為功能測(cè)試,它測(cè)試程序的輸出而不是邏輯,可以再提供一層防護(hù),找出可能被單元測(cè)試漏掉的bug,包括Tobi、Soda

十一、Web程序模板

1.ejs:https://github.com/tj/ejs,nom install ejs

2.Hogan

3.jade

十二、部署Node程序并維持正常運(yùn)行時(shí)間

1.讓Node保持運(yùn)行,F(xiàn)orever工具:

  • sudo node install -g forever

  • forever start/stop server.js

2.Upstart工具,重啟崩潰程序,記錄日志等

  • sudo apt-get install upstart

  • sudo yum install upstart

  • sudo service xxxxx.conf (upstart配置文件)

3.Node增加了集群API,借助這個(gè)API程序可以在不同的同價(jià)格上同時(shí)運(yùn)行多個(gè)“工人”,讓單個(gè)程序使用多核實(shí)現(xiàn)起來更容易

十三、超越Web服務(wù)器

1.由于Node的異步天性,它很適合用來執(zhí)行那些在同步環(huán)境中比較困難或效率低下的I/O密集型任務(wù)

2.Socket.IO允許你用服務(wù)器和客戶端之間的雙向通訊通道編寫實(shí)時(shí)的Web程序。在基于瀏覽器的游戲、聊天程序和流媒體應(yīng)用中非常流行

3.Buffer是Node給開發(fā)者準(zhǔn)備的特殊數(shù)據(jù)類型,它像是一塊長(zhǎng)度固定的原始二進(jìn)制數(shù)據(jù)板坯,可以把緩沖區(qū)看做數(shù)組,只是它們的大小是固定的,并且只能存放數(shù)字0到255,能處理原始字節(jié),所以可以用它們實(shí)現(xiàn)任何底層的協(xié)議

4.全局的process對(duì)象,包含當(dāng)前進(jìn)程的相關(guān)信息,比如傳給它的參數(shù)和當(dāng)前設(shè)定的環(huán)境變量,每個(gè)Node進(jìn)程都有一個(gè)單例的全局process對(duì)象,由所有模塊共享訪問

5.fs模塊,包含高層的ReadStream和WriteStream等,大部分Node文檔都指向了對(duì)應(yīng)man頁面中的C函數(shù)解釋上(擴(kuò)展模塊:fstream模塊,filed模塊)

6.繁衍外部進(jìn)程:

  • cp.exec(),在回調(diào)中繁衍命令并緩沖結(jié)果的高層API

  • cp.spawn(),將單例命令繁衍進(jìn)Child-Process對(duì)象中的底層API

  • cp.fork(),用內(nèi)置的IPC通道繁衍額外Node進(jìn)程的特殊方法

7.解析命令行參數(shù):process.argv

關(guān)于“Node.js有什么作用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI