1

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

我想写一些类似的东西:

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

有可能做这样的事情还是我错过了什么?

4

1 回答 1

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);}所有路由以避免重复发送标头。

于 2016-10-19T21:41:11.350 回答