如何使用Express和connect-timeout自定义超时响应?

时间:2016-10-19 10:22:10

标签: node.js express connect-timeout

我希望自定义在触发超时错误时发送给用户的响应。更具体地说,我想将它们重定向到一个静态页面,解释为什么会触发超时错误。

我想写一些类似的东西:

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

是否可以做这样的事情或者我错过了什么?

1 个答案:

答案 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);}以避免重复发送标头。