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

How prevent script from reloading when using hapi.js reply().hold()?

本文关键字:新加载 脚本 加载 hold 何防止 hapi js reply      更新时间:2023-09-26

我刚开始使用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()需要很长时间才能执行,这可能会导致超时,然后再次发出请求。如何更改请求的超时值,使其不会再次激发请求?

我真的很感激任何人能给我的任何建议/线索。

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

来自文档:

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

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

这样设置可以完全禁用路由的超时:

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