如何跟踪node.js中的asynchronous/等待错误?

假设你有一些相当复杂的node.js服务 ,有一天你会在它的日志中看到类似的东西:

Error: getaddrinfo ENOTFOUND not-existing-host.com not-existing-host.com:80 at errnoException (dns.js:28:10) at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26) 

注意 – 没有堆栈跟踪 。 如果您的服务中有大量的地方在进行http调用,您将如何find产生位置错误的地方?

有什么解决scheme可以保持堆栈跟踪(我不关心性能的含义,干净的堆栈跟踪方式更重要)?

看起来像require('longjohn')可以帮助,但它不是很可靠的工作,有时不打印堆栈跟踪(不能创build一个示例来演示)有没有其他解决scheme?

代码示例会产生这样的错误。 我用http作为例子,但是对于任何asynchronous函数都是如此。

 const request = require('request'); // Let's say we write some helper function that wraps "request.js" async function get(url) { return new Promise((resolve, reject) => { request(url, function (error, response, body) { error ? reject(error) : resolve(body) }) }) } // Running async function run() { console.log(await get('http://not-existing-host.com')) } run() .catch((e) => { console.log(e.stack) process.exit() }) 

PS

如果可以帮助 – 我使用TypeScript,它提供了一些方法来衡量asynchronous/等待实现。 目前我启用ES8输出,所以它TypeScripts输出node.js本地asynchronous/等待。