如何调试来自 stripe API 调用的错误?需要跨事件发射器的 node.js 堆栈跟踪?

how to debug error from stripe API call? need a node.js stacktrace across event emitter?

我有一个节点 webapp,它使用 stripe npm 包对 Stripe 进行各种 API 调用。有时我会收到如下所示的错误。请注意,堆栈跟踪被截断,因此我看不到哪个条带 API 调用导致错误,我也看不到在我的应用程序中进行此 API 调用的位置。

我能做些什么来获得更好的错误堆栈跟踪?

Error: Missing required param: customer.
    at Function.generate (/home/molsson/dv/foobar/node_modules/stripe/lib/Error.js:39:16)
    at IncomingMessage.<anonymous> (/home/molsson/dv/foobar/node_modules/stripe/lib/StripeResource.js:175:33)
    at Object.onceWrapper (events.js:299:28)
    at IncomingMessage.emit (events.js:215:7)
    at IncomingMessage.EventEmitter.emit (domain.js:476:20)
    at endReadableNT (_stream_readable.js:1183:12)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)

注意:错误本身只是一个例子。我已经修好了。我只想获得更好的堆栈跟踪或更好的方法来快速调试这些类型的错误。

我很确定我的节点版本默认有异步堆栈:

$ node --version
v12.12.0
$ node -p process.versions.v8
7.7.299.13-node.12

我尝试了 运行 NODE_OPTIONS='--trace-warnings --stack-trace-limit=9999' 但没有用。

它是否存在某种 "async stacktraces across event emitters" 调试工具?

我自己找到了这个问题的好答案。条带库在发出新的 API 请求之前触发和事件,因此您可以从那里打印堆栈跟踪:

    stripe.on('request', request => {
      const currentStack = (new Error()).stack.replace(/^Error/, '')
      console.log(`Making Stripe HTTP request to ${request.path}, callsite: ${currentStack}`)
    })

我在我的应用程序中添加了一个 STRIPE_API_TRACING 选项,如果我在没有堆栈的情况下遇到错误,我可以打开它。通过跟踪,我可以在日志中向上滚动一点,看看在错误发生之前调度了哪些 API 调用。