使用node.js和native promises

时间:2016-11-03 20:12:57

标签: node.js express stack-trace es6-promise

我们有一个快速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这一事实。

而不是拒绝(错误)我知道我可以拒绝(新错误(错误))但我不确定这是否是一个很好的做法,以满足我们的应用程序

1 个答案:

答案 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);
    });
}