2012-11-04 72 views
7

我的應用程序:Node.js,Express,一些中間件,包括connect-assets和express.static。來自Node.js的「管道中未處理的流錯誤」

所有在本地計算機(OSX,Node 0.8)上運行的開發模式(因此express.static)。

大概重要的細節:最近,我(從HTTP重定向有必要時)提出通過HTTPS整個應用程序的工作,而我開發使用自SIGNE證書(在瀏覽器中啓用,當然)和。現在

,應用程序常常失敗機智棧跟蹤這樣的:

(1)

stream.js:81 
    throw er; // Unhandled stream error in pipe. 
     ^
Error: write EPIPE 
    at errnoException (net.js:769:11) 
    at Object.afterWrite (net.js:593:19) 

(2)

stream.js:81 
    throw er; // Unhandled stream error in pipe. 
     ^
Error: socket hang up 
    at SecurePair.error (tls.js:948:15) 
    at EncryptedStream.CryptoStream._done (tls.js:432:17) 
    at EncryptedStream.CryptoStream._pull (tls.js:577:12) 
    at SecurePair.cycle (tls.js:866:20) 
    at EncryptedStream.CryptoStream.end (tls.js:405:13) 
    at Socket.onend (stream.js:66:10) 
    at Socket.EventEmitter.emit (events.js:126:20) 
    at TCP.onread (net.js:417:51) 

(3)

stream.js:81 
    throw er; // Unhandled stream error in pipe. 
     ^
Error: socket hang up 
    at createHangUpError (http.js:1264:15) 
    at CleartextStream.socketCloseListener (http.js:1315:23) 
    at CleartextStream.EventEmitter.emit (events.js:126:20) 
    at SecurePair.destroy (tls.js:938:22) 
    at process.startup.processNextTick.process._tickCallback (node.js:244:9) 

重要提示:這種情況經常發生,但不是每次,所以我認爲這不是我的代碼中的錯誤。

我發現這可能是由於express.static和打開的文件限制,所以我跑ulimit -n 10000 - 沒有效果,不幸的是。

任何想法?這開始非常令人沮喪。

回答

5

OK,看起來像我找到了答案(至少我發現了一個類似的問題提到的,盡了修復,並止跌):

express.static中間件必須是最後一個鏈

+0

我的天哪,你不知道我花了多少小時。謝謝。 – ninjaneer

+0

express.static修復程序的來源是什麼?我試圖診斷如何在connect.js應用程序中獲取未處理的套接字錯誤,並想知道這是否與此相關。但找不到別人說express.static必須是鏈中的最後一個,或者爲什麼。 – natevw

+1

google搜索某處...實際上,因爲我再次得到了相同的錯誤,所以現在我不確定它是否是一個真正的修復程序 – Guard