【问题标题】:Sails.js server request timeoutSails.js 服务器请求超时
【发布时间】:2018-10-02 20:45:27
【问题描述】:

我正在使用sails.js v0.10.5。
我有很长的处理控制器操作需要超过 2 分钟才能完成,这会导致 Sails 服务器超时。如何覆盖此超时持续时间并将其设置为我的值,例如 10 分钟。请指定在哪个文件中以及我需要进行哪些更改以增加 Sails 服务器超时。

【问题讨论】:

    标签: sails.js


    【解决方案1】:

    我的答案与 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(&lt;some timeout&gt;) 设置为控制器中处理路由的第一行来覆盖每个路由

    【讨论】:

      【解决方案2】:

      你可以找到哪个动作延迟了启动过程

      sails  --verbose lift
      

      大多数时候,ORM 会导致此类问题。

      更新 我认为超时是Express提供的,如果你想修改它,你可以使用connect-time

      1.安装

      $ npm install connect-timeout --save
      

      2.添加中间件到http.js

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

      【讨论】:

      • 感谢@Ryan Wu,但我需要将超时时间从 2 分钟增加到 10 分钟。因为呼叫需要这么多时间来处理。我通过在控制器var myAction= function(req,res){ req.connection.setTimeout(10*60*1000); // action code/processing res.ok(jsonData) } 中的代码实现了它,但我必须为每个操作编写它。我有任何配置选项来覆盖全局超时。
      • 仍然没有找到一种方法来覆盖全局超时...尝试了中间件中的 http.js 更改(但没有成功)。还有其他解决方案吗?
      【解决方案3】:

      yjimk,感谢您的想法...首先它对我不起作用,但我找到了解决方案。

      问题出在extendTimeout函数中,这里是固定版本:

      extendTimeout: (function () {
        console.log('Initializing `extendTimeout`...');
      
        return function (req, res, next) {
          sails.log.info('extendTimeout to 1h');
          req.setTimeout(3600000);
      
          return next();
        };
      })(),
      

      【讨论】:

        猜你喜欢
        • 2021-11-25
        • 2016-05-16
        • 1970-01-01
        • 1970-01-01
        • 2018-11-09
        • 2021-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多