2015-05-27 88 views
1

我希望對我的響應設置超時。我試過如下:Express&node.js超時

var timeout = express.timeout // express v3 and below 

app.use(timeout(120000)); 
app.use(haltOnTimedout); 

function haltOnTimedout(req, res, next){ 
    if (!req.timedout) next(); 
} 

的問題是,有一些要求它們需要更多的則120000 ms(大文件下載),並罰款。我想超時只有沒有信息在我的應用程序(服務器)和客戶端之間的數據流上傳輸的請求。

我上面的代碼關閉了所有需要更多的連接120000 ms

+0

它有任何更新嗎? – B3rn475

回答

2

您可以在消息本身(如果沒有數據轉移它會被稱爲)設置超時

req.connection.setTimeout(120000, function() { res.status(500).end(); }); 

https://nodejs.org/api/http.html#http_message_settimeout_msecs_callback

編輯:

我已經添加了500個狀態代碼

+0

關於這個問題的深思熟慮,這是正確的答案。如果你刪除了使用'timeout()'中間件並且在請求上設置了連接超時,那麼連接只會在非活動狀態下被刪除。您甚至可以將其封裝在傳遞路由中,以便所有請求具有相同的連接超時。 – seanhodges

+0

看來,這也是緊密聯繫,即響應需要更多的X毫秒,而沒有考慮到不活動的推理。此外,它給出了以下錯誤:'Object#沒有方法'end'' – MiddleWare

+0

這是我如何定義它:app.post(「/ getDocument」,function(req,res){{{0} {0} {try { (); req.connection.setTimeout(200,function(){logger.info(「Connection time out」); req.end(); });' – MiddleWare