2015-05-05 43 views
4

我正在使用sails.js v0.10.5。
我有很長的處理控制器操作需要超過2分鐘才能完成,導致sails服務器超時。如何覆蓋這個超時時間並將其設置爲我的值,例如10分鐘。請指定在哪個文件中以及需要做出哪些更改以增加sails服務器超時。Sails.js服務器請求超時

回答

3

你可以找到它的行動延遲起動過程

sails --verbose lift 

的大部分時間,ORM導致這種問題。

UPDATE 我認爲超時由快遞提供的,如果你想修改它,你可以使用connect-time

1.安裝

$ npm install connect-timeout --save 

2.加中間件HTTP。 js

var timeout = require('connect-timeout'); 
...... 
order: [ 'timeout' ....] 
+3

謝謝@Ryan Wu,但是我需要將超時時間從2分鐘增加到10分鐘。由於呼叫需要這很多時間來處理。我已經通過控制器 'var myAction = function(req,res){ \t req.connection.setTimeout(10 * 60 * 1000); //動作代碼/處理 res.ok(jsonData) } ' 但我必須爲每個動作編寫它。我有任何configutaion選項來覆蓋全局超時。 –

+0

我更新了答案! –

+1

仍然沒有找到一種方法來全局覆蓋超時... 嘗試了中間件中的http.js更改(但沒有成功)。 是否有其他解決方案? – EfiBN

0

我的回答很漂亮與Ryan提供的相似,但爲了清晰起見,我將擴展該示例。另外我沒有看到在那裏需要依賴安裝。

TL; DR加入該修訂req增加超時

/config/http.js

order: [ 
    'startRequestTimer', 
    'cookieParser', 
    'session', 
    'myRequestLogger', 
    'contentTypeCheck', 
    'extendTimeout', // <--- The order is somewhat important, added it before the body is parsed without issue 
    'bodyParser', 
    'handleBodyParserError', 
    'compress', 
    'methodOverride', 
    'poweredBy', 
    '$custom', 
    'router', 
    'www', 
    'favicon', 
    '404', 
    '500' 
], 

extendTimeout: function(req, res, next) { 
    req.setTimeout(300 * 1000); // Increase the request timeout to 5 minutes 

    return next(); 
}, 
// Other custom middleware 

還可以設置req.setTimeout(0),如果你不希望任何超時在所有定製的中間件,而可以是有點危險。

這將設置所有路線的超時記住。通過設置req.setTimeout(<some timeout>)作爲處理路由的控制器中的第一行,這可以在每個路由基礎上被覆蓋。