如何更改NodeJS请求流响应

时间:2016-03-29 13:44:15

标签: node.js express

我对NodeJS有些新意,目前我使用Express和Request(https://github.com/request/request)将我的应用请求转发给REST api服务器,当前我的代码如下所示:

app.use('/rest/*', function(req, res) {
    req.pipe(request('http://ipaddress/api')).pipe(res);
});

此代码在REST API服务器正常时有效,但如果其余的api服务器出现故障,我的nodejs应用程序也会关闭,因为请求流将失败并且我的应用程序未捕获错误。 我检查了Request github页面,它提供了一种处理流错误的方法,比如

app.use('/rest/*', function(req, res) {
    req.pipe(request('http://ipaddress/api').on('error', function(err) {
        console.log(err);
    })).pipe(res);
});

这只能记录错误并阻止我的NodeJS应用程序崩溃,但是我想在发生错误时更改响应,以便更改的响应可以通过管道传输到最终版本,例如,我想在伪代码中执行的操作:< / p>

app.use('/rest/*', function(req, res) {
    req.pipe(request('http://ipaddress/api').on('error', function(err) {
        console.log(err);
        // what I want to do in pseudocode
        response.statusCode = 500;
        response.json = {
            reason: err.errno 
        };
    })).pipe(res);
});

有什么方法可以解决我的问题吗?谢谢你的任何想法!

1 个答案:

答案 0 :(得分:0)

未经测试,但您是否可以将错误传回中间件以处理响应?

app.use('/rest/*', function(req, res, next) {
    req.pipe(request('http://ipaddress/api').on('error', function(err) {
        return next(err)
    })).pipe(res);
});

像这样处理

// Exception handling
app.use(function (error, req, res, next) {
    console.log(error);
    res.status(500).send(JSON.stringify(error));    
    next();
});