我对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);
});
有什么方法可以解决我的问题吗?谢谢你的任何想法!
答案 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();
});