当前位置: 首页 > 知识库问答 >
问题:

表示js响应超时

臧弘和
2023-03-14

问题

我一直在寻找Express的请求/响应超时。但是一切似乎都与连接有关,而不是请求/响应本身。

如果请求需要很长时间,则应超时。显然,这不应该发生,但即使是一个简单的错误,比如没有回调调用的路由处理程序或没有res.send(),浏览器也会永远等待回复。

空路由处理程序就是一个很好的例子。

app.get('/sessions/', function(req, res, callback){});

修复

我在app.use(app, router)之前添加了以下内容;似乎添加了超时功能。有人对此有任何经验/意见吗?

app.use(function(req, res, next){
    res.setTimeout(120000, function(){
        console.log('Request has timed out.');
            res.send(408);
        });

    next();
});

注意,我已将超时设置为2分钟。

共有3个答案

冯德宇
2023-03-14

更新如果使用Express 4.2,则超时中间件已被删除,因此需要手动添加

npm install connect-timeout

并且必须在代码中(根据注释编辑,如何将其包含在代码中)

 var timeout = require('connect-timeout');
 app.use(timeout('100s'));
许毅
2023-03-14
var server = app.listen();
server.setTimeout(500000);

灵感来自https://github.com/expressjs/express/issues/3330

app.use(function(req, res, next){
    req.setTimeout(500000, function(){
        // call back function is called when request timed out.
    });
    next();
});
尉迟边浩
2023-03-14

已经有一个用于超时支持的连接中间件:

var timeout = express.timeout // express v3 and below
var timeout = require('connect-timeout'); //express v4

app.use(timeout(120000));
app.use(haltOnTimedout);

function haltOnTimedout(req, res, next){
  if (!req.timedout) next();
}

如果您计划将超时中间件用作上述顶级中间件,则haltOnTimedOut中间件需要是堆栈中定义的最后一个中间件,并用于捕获超时事件。感谢@Aichholzer的更新。

请记住,如果您使用自己的超时中间件,4xx状态代码表示客户端错误,5xx表示服务器错误。408保留用于以下情况:

客户端在服务器准备等待的时间内没有生成请求。客户可以在以后的任何时间重复该请求,而无需修改

 类似资料:
  • 我使用快速和连接超时中间件来处理超时。 它工作得很好,但是我默认的服务器的超时设置为两分钟。 因此,如果我想将超时中间件设置为大于两分钟的值,我还必须将http服务器超时增加到稍大一点(否则我的连接超时处理程序不会被调用) 我怎样才能避免这种情况?我错过什么了吗?

  • 问题内容: 问题 我一直在寻找Express.js的请求/响应超时,但是一切似乎都与连接有关,而不是请求/响应本身。 如果请求花费很长时间,则应该超时。显然,这不应该发生,但即使是一个简单的错误,如具有不调用回调或不调用的路由处理程序,浏览器将永远等待答复。 空路由处理程序就是一个很好的例子。 固定 我 之前 添加了以下内容 ,并且似乎添加了超时功能。有人对此有任何经验/意见吗? 请注意,我已将超

  • 本文向大家介绍JS实现超精简响应鼠标显示二级菜单代码,包括了JS实现超精简响应鼠标显示二级菜单代码的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS实现超精简响应鼠标显示二级菜单代码。分享给大家供大家参考。具体如下: 这是一款精简版的二级导航菜单,响应鼠标的动作,鼠标放上即显示出菜单,常见的一种菜单样式。喜欢的朋友拿去修改一下,再美化一番,就够用了。 运行效果截图如下: 在线演示地址如下

  • 我正试图在我的Android emulator和Iphone上运行一个应用程序,使用Expo和Create React原生应用程序。 为此,我运行了以下命令。 执行run命令后,应用程序将在模拟器中运行,并出现以下错误: 当我在Iphone上扫描二维码,但在网络浏览器中无法访问ip时,也会发生同样的情况。 我在互联网上找到了以下修复方法,但似乎没有任何效果: 将端口19000添加到Windows防

  • 我的JSON响应如下所示: 我正在尝试提取成功消息和数据。但是,我的控制台输出保持为null。 提取响应后,我的代码将使用Rest Assured接收空响应: 我对成功和数据的响应均为空

  • 我使用Jmeter对一个包括web套接字连接的应用程序进行负载测试。 当尝试使用单读取采样器读取帧中的数据时,得到错误响应代码:无响应响应消息:读取超时,未收到响应。 有人能帮我解决这个问题吗? 线程名称:密苏里州TestEnv 1-1样例开始时间:2019-10-09 10:40:43 IST加载时间:1000连接时间:0延迟时间:0大小以字节为单位:0发送字节:0头大小以字节为单位:0主体大小