2012-11-04 95 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