Node.js 適合用來(lái)做 web 開(kāi)發(fā)嗎?
時(shí)間:2023-11-25 19:36:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-11-25 19:36:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)
Node.js 適合用來(lái)做 web 開(kāi)發(fā)嗎?:異步的思維是js的特點(diǎn),也是node高并發(fā)性能優(yōu)勢(shì)的原因之一,你從傳統(tǒng)的同步語(yǔ)言過(guò)來(lái)可能不習(xí)慣,但是像我們這種從前端寫(xiě)js過(guò)來(lái)的人就自然得像說(shuō)話(huà)一樣,關(guān)鍵還是適應(yīng)。熟悉之后可以用async,Promise系 (q, bluebird) 或者 eventproxy 之類(lèi)的庫(kù)來(lái)改善代碼嵌套的問(wèn)題。
異常的問(wèn)題 - Node 核心庫(kù)的 API 拋異常大致有三種常見(jiàn)情況:
1. 異步回調(diào)。按慣例,接收的回調(diào)函數(shù)第一個(gè)參數(shù)都是可能出現(xiàn)的異常,沒(méi)有特殊情況的話(huà)你應(yīng)該把異常按照同樣的參數(shù)位置一層層傳下去,直到最頂層的回調(diào)里進(jìn)行統(tǒng)一處理。
2. 同步版本的api會(huì)直接拋異常。所以如果確實(shí)無(wú)法避免拋錯(cuò)的可能,直接 try catch,要么就避免用同步版本。
3. Stream形態(tài)的API,必須在stream對(duì)象上添加 error 的偵聽(tīng)函數(shù),不然異常會(huì)直接拋出。
如果出現(xiàn)導(dǎo)致進(jìn)程中斷的異常,說(shuō)明你的代碼有邏輯層面的問(wèn)題(以上幾點(diǎn)沒(méi)有完全做好),你應(yīng)該在開(kāi)發(fā)的時(shí)候發(fā)現(xiàn)并處理這些異常,而不是讓它們?cè)诓渴瓠h(huán)境中發(fā)生。
如果你實(shí)在避免不了問(wèn)題發(fā)生,你可以用 Node 的 Domain API 來(lái)對(duì)整塊代碼的異常進(jìn)行捕捉。
另外可以用進(jìn)程管理工具比如 forever, pm2 或是 monit 監(jiān)視應(yīng)用進(jìn)程,崩潰后自動(dòng)重啟。
最后回到你的問(wèn)題,node是否適合做web開(kāi)發(fā) - node的獨(dú)特優(yōu)勢(shì)是高并發(fā),高實(shí)時(shí)性,或者單頁(yè)富前端的web應(yīng)用,比如實(shí)時(shí)聊天,游戲,另外node也是寫(xiě)JSON API的最好選擇。