如何从条带化API调用调试错误?是否需要跨事件发射器的nod e.js stacktrace?

问题描述 投票:0回答:1

我有一个节点webapp,它使用stripe npm软件包对Stripe进行了各种API调用。有时我会收到类似下面的错误。请注意,stacktrace被截断了,因此我看不到哪个条纹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'运行,但没有帮助。

是否存在某种“跨事件发射器的异步堆栈跟踪”调试对象?

node.js stripe-payments stack-trace eventemitter
1个回答
0
投票

我本人对这个问题找到了一个很好的答案。在发出新的API请求之前,条带库会触发并触发事件,因此您可以从此处打印stacktrace:

    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调用。

© www.soinside.com 2019 - 2024. All rights reserved.