node.js - 使用 Node.js 和 native Promise 构建堆栈跟踪

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

我们有一个 Express API 应用程序,我们在其中利用 ES6 的原生 Promise。

我们当前的简单获取设置是

//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 Node 模块的跟踪。我希望跟踪包含controller.js 调用repository.js 的事实。

我知道我可以拒绝(new Error(err)),而不是拒绝(err),但我不确定这是否是我们应用程序中的一个好习惯

最佳答案

希望这对您有帮助。

Calls to next() and next(err) indicate that the current handler is complete and in what state. next(err) will skip all remaining handlers in the chain except for those that are set up to handle errors.

所以你的 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);
    });
}

关于node.js - 使用 Node.js 和 native Promise 构建堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40410432/

相关文章:

node.js - 如何将多个数据从 sequelize promise 传递给 View 而不使用内部 then 方法

javascript - 在 NodeJS 中创建对象的推荐方法是什么?

json - res.json 发送后无法设置 header

javascript - 在express.js中处理POST请求时出现404错误

javascript - 一个应用程序中不同html中的不同合并和缩小的js文件

javascript - Node.js 和 jdbc : TypeError: Cannot read property 'url' of undefined

javascript - Nodemailer 多个收件人

java - Eclipse 无法启动调试方式

javascript - 比较堆栈轨迹(Chrome 开发者工具)

c++ - 为什么 StackWalk64 总是返回 true?