【发布时间】:2018-10-02 20:45:27
【问题描述】:
我正在使用sails.js v0.10.5。
我有很长的处理控制器操作需要超过 2 分钟才能完成,这会导致 Sails 服务器超时。如何覆盖此超时持续时间并将其设置为我的值,例如 10 分钟。请指定在哪个文件中以及我需要进行哪些更改以增加 Sails 服务器超时。
【问题讨论】:
标签: sails.js
我正在使用sails.js v0.10.5。
我有很长的处理控制器操作需要超过 2 分钟才能完成,这会导致 Sails 服务器超时。如何覆盖此超时持续时间并将其设置为我的值,例如 10 分钟。请指定在哪个文件中以及我需要进行哪些更改以增加 Sails 服务器超时。
【问题讨论】:
标签: sails.js
我的答案与 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>) 设置为控制器中处理路由的第一行来覆盖每个路由
【讨论】:
你可以找到哪个动作延迟了启动过程
sails --verbose lift
大多数时候,ORM 会导致此类问题。
更新
我认为超时是Express提供的,如果你想修改它,你可以使用connect-time
1.安装
$ npm install connect-timeout --save
2.添加中间件到http.js
var timeout = require('connect-timeout');
......
order: [ 'timeout' ....]
【讨论】:
var myAction= function(req,res){ req.connection.setTimeout(10*60*1000); // action code/processing res.ok(jsonData) } 中的代码实现了它,但我必须为每个操作编写它。我有任何配置选项来覆盖全局超时。
yjimk,感谢您的想法...首先它对我不起作用,但我找到了解决方案。
问题出在extendTimeout函数中,这里是固定版本:
extendTimeout: (function () {
console.log('Initializing `extendTimeout`...');
return function (req, res, next) {
sails.log.info('extendTimeout to 1h');
req.setTimeout(3600000);
return next();
};
})(),
【讨论】: