2016-11-21 52 views
0

我正在使用Node.js,Express和Mongoose構建應用程序。我正在使用Cloud9開發環境。我用快遞生成器來創建我的應用程序的基礎,並已添加到它。快速/節點服務器隨機崩潰,events.js ECONNRESET

我似乎隨機得到這個錯誤,服務器停止。它在任何特定事件期間都不會發生,它發生在頁面加載之間。它似乎沒有發生在任何特定頁面上。

我總是得到這個錯誤,而且我經常不得不重新開始。

events.js:141 
     throw er; // Unhandled 'error' event 
    ^

Error: read ECONNRESET 
    at exports._errnoException (util.js:870:11) 
    at TCP.onread (net.js:552:26) 

當我收到此錯誤時,MongoDB不會崩潰。我只需要再次啓動節點服務器,它工作正常。直到它再次隨機崩潰。

我不確定這個錯誤是否只是C9的一個副作用,如果是這樣我不擔心它,我只是不希望它在生產中發生,特別是因爲我看不到它日誌幾乎一樣容易。

如果我真的無法「處理錯誤」,我想知道我該怎麼做,我寧願我的服務器在出現問題時不會崩潰。

回答

1

可以使用pm2啓動服務器。那麼如果有任何錯誤,你的服務器不會崩潰。它只會拋出錯誤並繼續運行。它也是其他有用的功能。

您可以在這裏閱讀更多關於pm2的信息https://www.npmjs.com/package/pm2

+0

謝謝你,這基本上是我所需要知道的,我打算在生產環境中使用PM2,所以我認爲我應該全部定下來。 – stackers

2

在節點中,whenever an 'error' event is emitted and no one listens to it, it will throw
爲了讓它不扔,把一個聽衆放在它上面,並自己處理。這樣,您可以使用更多信息記錄錯誤。

您也可以嘗試使用有用的node.js選項--abort-on-uncaught-exception。它不僅提供了更詳細和有用的錯誤堆棧跟蹤,而且還可以在應用程序崩潰時保存核心文件,以便進一步調試。

要讓一組呼叫有一個監聽者,您可以使用domains並在運行時捕獲其他錯誤。確保與http(服務器/客戶端)相關的每個異步操作與代碼的其他部分處於不同的域環境中,域將自動偵聽錯誤事件並將其傳播到它自己的處理程序。所以你只能聽那個處理程序並獲取錯誤數據。您還可以免費獲得更多信息here

也是這個SO answer見...

+0

我應該在哪裏傾聽?在每一條路線? – stackers

+0

看我的編輯.... – MarcoS

+0

你鏈接的那些網頁似乎沒有去正確的地方,我在那個網頁上找不到它 – stackers