【问题标题】:How prevent script from reloading when using hapi.js reply().hold()?使用 hapi.js reply().hold() 时如何防止脚本重新加载?
【发布时间】:2016-08-06 12:53:41
【问题描述】:

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

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

【问题讨论】:

    标签: javascript node.js timeout hapijs


    【解决方案1】:

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

    From docs:

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

    ...

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

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

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

    【讨论】:

    • 谢谢!!做到了!我会接受你的回答。
    猜你喜欢
    • 2022-08-24
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多