Node.js 適合用來做 web 開發嗎?

最近node玩得比較多, 居然想用node給自己做一個博客玩玩, 雖然可用的框架不少, 但是在編碼過程中困難重重. 除了非同步io, 事件機制 使編碼不能按照php, java的思維去設計, 還有就是它的單線程, 一旦出現異常便全線崩潰, 一個可用的web程序在出現異常後至少應該返回個錯誤頁面而且不會影響其他用戶. 之後想自己實現一套容錯機制, 發現太難了, 非同步環境中不能妄想用一兩個try-catch回收所有的異常...目前正嘗試用父子進程, 無比糾結中...

我在想, node是不是正如其名字一樣, 只適合作為雲中的一個節點, 跑一些單一的邏輯, 處理一些輕量的數據?


非同步的思維是js的特點,也是node高並發性能優勢的原因之一,你從傳統的同步語言過來可能不習慣,但是像我們這種從前端寫js過來的人就自然得像說話一樣,關鍵還是適應。熟悉之後可以用async,Promise系 (q, bluebird) 或者 eventproxy 之類的庫來改善代碼嵌套的問題。

異常的問題 - Node 核心庫的 API 拋異常大致有三種常見情況:

1. 非同步回調。按慣例,接收的回調函數第一個參數都是可能出現的異常,沒有特殊情況的話你應該把異常按照同樣的參數位置一層層傳下去,直到最頂層的回調里進行統一處理。

2. 同步版本的api會直接拋異常。所以如果確實無法避免拋錯的可能,直接 try catch,要麼就避免用同步版本。

3. Stream形態的API,必須在stream對象上添加 error 的偵聽函數,不然異常會直接拋出。

如果出現導致進程中斷的異常,說明你的代碼有邏輯層面的問題(以上幾點沒有完全做好),你應該在開發的時候發現並處理這些異常,而不是讓它們在部署環境中發生。

如果你實在避免不了問題發生,你可以用 Node 的 Domain API 來對整塊代碼的異常進行捕捉。

另外可以用進程管理工具比如 forever, pm2 或是 monit 監視應用進程,崩潰後自動重啟。

最後回到你的問題,node是否適合做web開發 - node的獨特優勢是高並發,高實時性,或者單頁富前端的web應用,比如實時聊天,遊戲,另外node也是寫JSON API的最好選擇。


linkedin 伺服器就是用node 寫的, yahoo也是。 所以這個問題答案是很明顯的。

真正的問題應該是, 用node 如何開發最好的web app?


超適合,不管是 restful api 還是網站開發。

現在 node 最大的使用場景不正是 web 開發嗎?


守護進程還是很容易實現的


非常適合!


個人以為以後web開發

實時的

30%php(很多是wordpress這樣的開源的定製)

30%ruby/python

40% nodejs

後端非實時的

那是java python c# c++ scala erlang的天下


適合。而且我覺得作為demo系統來說,node 是不錯的選擇。題主之所以有疑問主要是沒有理解和利用好node。node有多種非同步處理的機制,而這些非同步機制處理錯誤的方法都不盡相同。但有一點可以肯定,雖然是單線程,但出現錯誤並不會直接導致應用死掉;如果導致了只是因為錯誤處理不當。建議在開發前好好看看所用模塊的api和文檔說明。


web開發適合


你問一個為web而生的語言合不合適寫web程序,你不覺得很搞笑嗎

如果node不適合用來寫web,那你覺得它適合用來幹嘛?


推薦閱讀:

Websocket 用node還是python開發比較好?
redis怎麼做消息隊列?
Mozilla Rhino 和 Node.js 兼容嗎?

TAG:Web開發 | JavaScript | Nodejs |