выполнение кода, чтобы получить последовательность вызова функций при обработке веб-запроса?
ну первое что лезет в голову это просто нодовский отладчик
попробуй написать в какой-нибудь из функций console.trace('') const http = require('http') http.createServer((req, res) => { a() }).listen(3000) function a() { console.trace('') } Trace at a (/home/.../server.js:7:10) at Server.<anonymous> (/home/.../server.js:3:2) at Server.emit (node:events:376:20) at parserOnIncoming (node:_http_server:907:12) at HTTPParser.parserOnHeadersComplete (node:_http_common:126:17)
Также можешь загуглить очень древнюю штуку такую как arguments.callee Она хоть и считается устаревшей, но раньше с ее помощью можно было тоже stacktrace отследить
и еще один вариант function a() { try { throw new Error() } catch(err) { console.log(err.stack) } } Больше ничего не могу вспомнить
однако если у него большая вложенность вызовов функции то думаю обычный пошаговый отладчик лучше будет чем писать в каждом месте console.trace
создать als в роуте. назначить в als каждому запросу uuid, в логер внедрить экземпляр als и логировать его, в функциях использовать данный логгер.
app.use((req, res, next) => { const asyncLocalStorage = diContainer.get<any>(TYPES.AsyncLocalStorage); asyncLocalStorage.run(new Map(), () => { asyncLocalStorage.getStore().set("requestId", uuidv4()); next(); }); });log(...args): void { const date = moment(new Date()).format("DD.MM.YY HH:mm:ss.SSS"); const store = this.asyncLocalStorage.getStore(); const logId = store ? store.get("requestId") : "context-is-lost"; console.log(date, logId, ...args); }можно без di, просто через экспорт.
Обсуждают сегодня