From eeea0dd1e74487edb0f707e571ddd14ec09686b0 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Mon, 21 Jan 2019 20:45:55 +0100 Subject: events: show inspected error in uncaught 'error' message If there is no handler for `.emit('error', value)` and `value` is not an `Error` object, we currently just call `.toString()` on it. Almost always, using `util.inspect()` provides better information for diagnostic purposes, so prefer to use that instead. Refs: https://github.com/nodejs/help/issues/1729 PR-URL: https://github.com/nodejs/node/pull/25621 Reviewed-By: Luigi Pinca Reviewed-By: Ruben Bridgewater Reviewed-By: Matheus Marchini --- lib/events.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'lib/events.js') diff --git a/lib/events.js b/lib/events.js index 10cec4bd69..fab8652ebf 100644 --- a/lib/events.js +++ b/lib/events.js @@ -172,9 +172,18 @@ EventEmitter.prototype.emit = function emit(type, ...args) { // up in Node's output if this results in an unhandled exception. throw er; // Unhandled 'error' event } + + let stringifiedEr; + const { inspect } = require('internal/util/inspect'); + try { + stringifiedEr = inspect(er); + } catch { + stringifiedEr = er; + } + // At least give some kind of context to the user const errors = lazyErrors(); - const err = new errors.ERR_UNHANDLED_ERROR(er); + const err = new errors.ERR_UNHANDLED_ERROR(stringifiedEr); err.context = er; throw err; // Unhandled 'error' event } -- cgit v1.2.3