Anthony O. Anthony O. - 2 months ago 5
Javascript Question

How to specify a "caused by" in a JavaScript Error?

In my NodeJS program, I parse some user JSON file.

So I use :



this.config = JSON.parse(fs.readFileSync(path));


The problem is that if the json file is not correctly formated, the error thrown is like:

undefined:55
},
^
SyntaxError: Unexpected token }
at Object.parse (native)
at new MyApp (/path/to/docker/lib/node_modules/myApp/lib/my-app.js:30:28)
...


As it is not really user friendly I would like to throw an
Error
specifying some user friendly message (like "your config file is not well formated") but I want to keep the stacktrace in order to point to the problematic line.

In the Java world I used
throw new Exception("My user friendly message", catchedException)
in order to have the original exception which caused that one.

How is it possible in the JS world?

Answer

What I finally did is:

try {
    this.config = JSON.parse(fs.readFileSync(path));
} catch(err) {
    var newErr = new Error('Problem while reading the JSON file');
    newErr.stack += '\nCaused by: '+err.stack;
    throw newErr;
}