我希望自定义在触发超时错误时发送给用户的响应。更具体地说,我想将它们重定向到一个静态页面,解释为什么会触发超时错误。
我想写一些类似的东西:
var express = require('express')
var timeout = require('connect-timeout')
var app = express();
var port = process.env.PORT || 8080;
app.use(timeout(10,{"respond":true}));
app.use(haltOnTimedout);
// GET ROUTES HERE
app.listen(port, function() {
console.log('Our app is running on port '+ port);
});
function haltOnTimedout(req,res,next) {
if (req.timedout) {
res.redirect('/timedout.html');
} else {
next();
}
};
上面的代码无法按预期运行:即使触发超时,也不会将用户重定向到静态网页timedout.html
,而是会抛出错误ServiceUnavailableError: Response timeout
是否可以做这样的事情或者我错过了什么?
答案 0 :(得分:0)
如果有人得到同样的问题,我终于找到答案并在此发布。
我将以下代码行放在server.js
代码的最后:
app.use(haltOnTimedout);
function haltOnTimedout(err,req,res,next) {
if (req.timedout === true) {
if (res.headersSent) {
next(err);
} else {
res.redirect('/timedout.html');
}
} else {
next();
}
};
并在所有路由中添加if (!req.timedout) { res.send(something);}
以避免重复发送标头。