3

我在节点中有一个函数,如下所示:

async someFlow() {
        try {
            func1();
            func2();
            await getSomeData();
            func3();
        }
        catch (e) {
            sentryIo.captureException(e);
        }
    }

getSomeData() 看起来像这样:

async getSomeData() {
        //... some code
        await pgPromise.one('select * from some bad syntax') // line 351!!
        //... some code
    }

当 pgPromise(与 PostgreSQL 对话的库)抛出错误时,错误的堆栈跟踪仅包含发生错误的 pgPromise 库 的内部行号。

因此,当错误被捕获并记录到 Sentry.io 服务时,我无法知道错误的确切行。

我怎样才能做到这一点,以便错误将包含在堆栈跟踪中,告诉我错误发生在第 351 行

4

1 回答 1

6

我最终做了:

var bb = require('bluebird');
bb.config({longStackTraces: true});
var pgp = require('pg-promise')({promiseLib: bb});

这给了我完整的承诺堆栈跟踪。


来自pg-promise的作者的备忘录:

确保在投入生产时禁用长堆栈跟踪,因为有时这些会对性能和内存消耗产生巨大影响。

于 2017-01-21T05:32:45.107 回答