I'm trying to catch the stack trace of an node.js uncaughtException and it works fine for different errors but not for throw() statements:
Correct stack trace on exception handling:
$ cat errorFunc.js
process.on('uncaughtException', function(exception) {
console.log('uncaughtException occurred: ' + exception.stack);
});
MyError();
$ node errorFunc.js
uncaughtException occurred: ReferenceError: MyError is not defined
at Object.<anonymous> (/home/jolcese/code/WebEnclaves/Server/errorFunc.js:5:1)
at Module._pile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:901:3
$
Missing stack trace on exception caused by throw():
$ cat errorThrow.js
process.on('uncaughtException', function(exception) {
console.log('uncaughtException occurred: ' + exception.stack);
});
throw('my error');
$ node errorThrow.js
uncaughtException occurred: undefined
$
Any idea why?
Thanks Jose
Disclaimer: I know that using process.on('uncaughtException') is a very, very bad thing and I will be punished but using domains is not an option in this code.
I'm trying to catch the stack trace of an node.js uncaughtException and it works fine for different errors but not for throw() statements:
Correct stack trace on exception handling:
$ cat errorFunc.js
process.on('uncaughtException', function(exception) {
console.log('uncaughtException occurred: ' + exception.stack);
});
MyError();
$ node errorFunc.js
uncaughtException occurred: ReferenceError: MyError is not defined
at Object.<anonymous> (/home/jolcese/code/WebEnclaves/Server/errorFunc.js:5:1)
at Module._pile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:901:3
$
Missing stack trace on exception caused by throw():
$ cat errorThrow.js
process.on('uncaughtException', function(exception) {
console.log('uncaughtException occurred: ' + exception.stack);
});
throw('my error');
$ node errorThrow.js
uncaughtException occurred: undefined
$
Any idea why?
Thanks Jose
Disclaimer: I know that using process.on('uncaughtException') is a very, very bad thing and I will be punished but using domains is not an option in this code.
Share Improve this question asked May 23, 2013 at 16:17 JoseOlceseJoseOlcese 5326 silver badges14 bronze badges 1- Keep on mind that according to MDN the stacktrace property is non-standard – Buksy Commented Nov 2, 2022 at 13:23
1 Answer
Reset to default 7JavaScript lets you throw anything.
If you want to throw errors with stack traces in JavaScript, you need to throw Error
objects.
(specification )
Also, throw is an operator and not a function.
Try
throw new Error('my error');
See the manual on Mozilla Developer Network for more information.