2015-11-16 85 views
9

我使用Express中間件設置了節點服務器。當加載一個觸發大約10個其他負載(js,css等)的HTML文件時,我在某些文件上獲得了ECONNABORTED錯誤隨機。確切的錯誤是:在Express/Node中使用sendFile時出現隨機'ECONNABORTED'錯誤

{ [Error: Request aborted] code: 'ECONNABORTED' } 

通過這種簡化的代碼生成(之後我試着調試問題):

res.sendFile(res.locals.physicalUrl,function (err) { 
    if (err) 
     console.log(err); 
    ... 
    } 

很多帖子談論該錯誤不指定全路徑名產生。這不是這裏的情況。我確實指定了完整路徑,而且實際上錯誤是隨機生成的。有時候,頁面及其所有後續鏈接都可以完美載入,有時候它們不會。我試圖刷新緩存,並沒有找到任何模式來連接它。

這個特定的錯誤似乎是套接字連接中止的一個通用術語,並在FTP等其他應用程序的上下文中討論。

已經意識到節點工作線程可以增加,我試圖做這樣使用:

process.env.UV_THREADPOOL_SIZE = 20; 

但是,我的理解是,即使沒有這一點,在大部分的文件傳輸可能要等待工作線程是免費的,不會中止。我不是在說這裏的大文件,所有文件都小於1 MB。

我有一種直覺,認爲這與節點直接無關。

請指出任何其他可能性(節點或其他)來處理此錯誤。此外,還有其他間接解決方案?重試幾次可能是一次,但那會很笨拙。編輯:不,我不能重試。標題已發送錯誤!

一個側面說明: 上使用SENDFILE的許多例子跳過使用回調,從而給人的印象,這是一個同步調用。不是這樣。請始終使用回調,檢查是否成功,然後才轉到「下一個」中間件,或者如果發送失敗,採取適當措施。如果不這樣做,可能會導致難以在異步環境中調試後果。

+0

當使用'res.sendFile'時,即使'res.statusCode'爲'200',我也看到了一些'ECONNABORTED'。目前我還沒有找到解決方案。 – paperclip

回答

2

https://stackoverflow.com/a/36949631/2798152 難道是可能的,在某些情況下,終止由異步調用res.sendFile結束之前調用res.end連接?

如果情況並非如此 - 您可以將更多的應用程序代碼粘貼到您的應用程序中嗎?

+1

這對我有效。 'res.end'在'res.download'之前被調用。 +1 – Avraham

0

卸載和重新安裝MongoDB爲我解決了這個問題。

我正面臨同樣的問題。它開始發生時,我不得不強制重啓我的筆記本電腦,因爲它變得沒有響應。在重新啓動時,嘗試使用nodejs連接到mongo服務器,總是拋出ECONNABORTED錯誤

相關問題