我有一个使用express的nodejs应用程序。
对于特定的GET请求,我想设置一个超时,如果达到这个超时,那么我想彻底结束请求并重定向到超时页面。
我在我的route.js 文件中尝试了以下操作:
app.get('/exec', isLoggedIn, function(req, res) {
var customTimeout = 10000;
req.connection.setTimeout(customTimeout, function(){
console.log("TIMED!");
res.render('timeout.ejs', {
user: req.user,
});
});
//execution of the GET request
res.render('success.ejs', {
user: req.user,
});
});
10 秒后,我可以看到“TIMED!”日志中的消息,但我没有重定向到超时页面,并且请求仍在后台运行...
有人可以帮我解决这个问题吗?
最佳答案
这对我有用:
app.get('/exec', isLoggedIn, function(req, res) {
var customTimeout = 10000;
res.setTimeout(customTimeout, function(){
console.log("TIMED!");
res.render('timeout.ejs', { user: req.user });
});
res.render('success.ejs', { user: req.user });
});
我假设您正在执行某种可能需要很长时间才能完成的操作(而不是最后一个 res.render()
)(10 秒后您想要通知用户操作超时)。
如果该操作无法以某种方式取消,最终它将完成并尝试发回响应,在这种情况下,您可能会遇到错误(很可能“Can't发送后设置 header ")。
因此,在发送响应之前,您需要检查超时处理程序是否尚未发送响应。您可以使用res.headersSent
为此。
关于node.js - 特定 app.get 上的快速超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31100419/