как отладить ошибку при вызове API полосы? нужна трассировка стека node.js через эмиттер событий? - PullRequest
1 голос
/ 30 мая 2020

У меня есть веб-приложение узла, которое выполняет различные вызовы API в Stripe с использованием пакета stripe npm. Иногда я получаю ошибки, подобные приведенной ниже. Обратите внимание, что трассировка стека усечена, поэтому я не могу видеть, какой вызов 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)

Примечание: сама ошибка является лишь примером. Я это уже починил. Я просто хочу получить лучшие трассировки стека или лучший метод быстрой отладки этих типов ошибок.

Я почти уверен, что моя версия узла по умолчанию имеет asyn c стеки:

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

Я пробовал работать с NODE_OPTIONS='--trace-warnings --stack-trace-limit=9999', но это не помогло.

Существует ли какая-то отладочная функция "asyn c stacktraces между эмиттерами событий"?

1 Ответ

1 голос
/ 30 мая 2020

Я сам нашел хороший ответ на этот вопрос. Библиотека полос срабатывает и событие перед созданием нового запроса 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 были отправлены непосредственно перед тем, как произошла ошибка.

...