#javascript #node.js #express
Вопрос:
Допустим, у меня есть следующие функции в проекте, распределенные в разных файлах и используемые несколькими родительскими функциями.
Используя VError
библиотеку, я могу просматривать трассировку стека каждой отдельной ошибки функций, что приводит меня к ошибке самого низкого уровня — уровень 1.
Сейчас я внедряю обработку ошибок в свой проект — мой вопрос: полезно ли фиксировать дорожку стека до такого уровня детализации и записывать ее в журналы?
Экспресс/Узел покажет мне ошибку самого низкого уровня из коробки.
Примечание: Насколько показывает мое исследование, я должен выдавать только те ошибки, которые сами по себе не могут быть обработаны с пользой — обработка этих ошибок на более высоком уровне.
const VError = require("VError"); exports.f1 = () =gt; { try { nofunc() } catch (error) { throw new VError('Faliure - Level 1'); } } exports.f2 = () =gt; { try { this.f1() } catch (error) { throw new VError(error, 'Faliure Level 2'); } } exports.f3 = () =gt; { try { this.f2() } catch (error) { throw new VError(error, 'Faliure - Level 3'); } } exports.f4 = () =gt; { try { this.f3() } catch (error) { console.log(error) } } this.f4()
Пример ошибки
VError: Faliure - Level 3: Faliure Level 2: Faliure - Level 1 at Object.exports.f3 (/errors.test.js:23:15) at Object.exports.f4 (/errors.test.js:29:14) at Object.lt;anonymousgt; (/errors.test.js:35:6) at Module._compile (node:internal/modules/cjs/loader:1108:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1137:10) at Module.load (node:internal/modules/cjs/loader:973:32) at Function.Module._load (node:internal/modules/cjs/loader:813:14) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12) at node:internal/main/run_main_module:17:47 { jse_shortmsg: 'Faliure - Level 3', jse_cause: VError: Faliure Level 2: Faliure - Level 1 at Object.exports.f2 (/errors.test.js:15:15) at Object.exports.f3 (/errors.test.js:21:14) at Object.exports.f4 (/errors.test.js:29:14) at Object.lt;anonymousgt; (/errors.test.js:35:6) at Module._compile (node:internal/modules/cjs/loader:1108:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1137:10) at Module.load (node:internal/modules/cjs/loader:973:32) at Function.Module._load (node:internal/modules/cjs/loader:813:14) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12) at node:internal/main/run_main_module:17:47 { jse_shortmsg: 'Faliure Level 2', jse_cause: VError: Faliure - Level 1 at Object.exports.f1 (/errors.test.js:7:15) at Object.exports.f2 (/errors.test.js:13:14) at Object.exports.f3 (/errors.test.js:21:14) at Object.exports.f4 (/errors.test.js:29:14) at Object.lt;anonymousgt; (/errors.test.js:35:6) at Module._compile (node:internal/modules/cjs/loader:1108:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1137:10) at Module.load (node:internal/modules/cjs/loader:973:32) at Function.Module._load (node:internal/modules/cjs/loader:813:14) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12) { jse_shortmsg: 'Faliure - Level 1', jse_info: {} }, jse_info: {} }, jse_info: {} }