如何在使用hapi.js reply()。hold()时阻止脚本重新加载?

时间:2016-04-14 19:19:26

标签: javascript node.js timeout hapijs

我刚刚开始使用hapi.js,并在尝试推迟路由响应时遇到问题。

我使用以下代码成功推迟了/query路线的响应:

server.route([{
    method: 'GET',
    path: '/query',
    config: {
        handler: function(request, reply) {
            var response = reply().hold();              
            db = request.server.plugins['hapi-mongodb'].db;
            someFxn(callbackFxn, request, response);    
        }
    }

}]);

var someFxn(cb, req, res){
   var raw = {}; 
   //... do lots of stuff that can take a long time
   cb(req, res, raw); 
}

var callbackFxn = function(request, response, data){
    response.source = data; 
    response.send(); 
}

我遇到的问题是有时someFxn()需要很长时间才能执行,这似乎可能会导致超时并再次发出请求。如何更改请求的超时值,以便它不会再次触发请求?

我非常感谢任何人可以给我的建议/指导。

1 个答案:

答案 0 :(得分:3)

您可能会遇到默认的Node.js套接字超时2分钟。您可以使用路由配置选项config.timeout.socket覆盖它:

From docs:

  

timeout - 定义处理持续时间的超时:

     

...

     

socket - 默认情况下,节点   套接字在2分钟后自动超时。使用此选项   覆盖此行为。默认为离开节点的undefined   默认不变。设置为false以禁用套接字超时。

像这样设置以完全禁用路径的超时:

server.route([{
    method: 'GET',
    path: '/query',
    config: {
        timeout: {
            socket: false
        },
        handler: function(request, reply) {

            ...
        }
    }
}]);