我们有一个快速API应用程序,我们利用ES6的本机承诺。
我们目前的简单获取设置将是
//controller.js snippet
get: function (req, res, next) {
repository.getObject()
.then(function (response) {
return res.status(200).json(response);
}).catch(function (err) {
return next(err);
});
}
//repository.js snippet
getObject:function(){
return new Promise(function (resolve, reject) {
var sql = SELECT * FROM table;
db.query(sql, function (err, result) {
if (err) return reject(err);
return resolve(result.rows));
});
});
}
//app.js snippet
app.use(function (err, req, res, next) {
logger.log(err, err.stack)
});
我们看到的问题是,记录的err.stack只包含来自db节点模块的跟踪。我希望跟踪包含controller.js调用repository.js这一事实。
而不是拒绝(错误)我知道我可以拒绝(新错误(错误))但我不确定这是否是一个很好的做法,以满足我们的应用程序
答案 0 :(得分:0)
我希望这会对你有所帮助。
调用 next()和 next(错误)表示当前处理程序是 完成和处于什么状态。 下一个(错误)将跳过所有剩余的处理程序 在链链中,用于设置处理错误的那些。
所以你的controller.js
需要像这样 -
//controller.js snippet
get: function (err, req, res, next) {
repository.getObject()
.then(function (response) {
return res.status(200).json(response);
}).catch(function (err) {
return next(err);
});
}