Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

javascript node.js getting line number in try catch?

I'm using try catch on a node.js script:

try {} catch (err) {console.log(err)}

I get an output like this:

{ 
  stack: [Getter/Setter],
  arguments: [ 'undefined' ],
  type: 'called_non_callable',
  message: [Getter/Setter]
}

Is there an easy way to make this more informative? Include line numbers and function names and such?

like image 991
Mark Avatar asked Apr 27 '11 10:04

Mark


1 Answers

Those [Getter/Setter] members indicate further information available on the error object. You can easily dump the contents of those getters/setters using a small helper function (very trivial implementation, further refinement is up to you)

function dumpError(err) {
  if (typeof err === 'object') {
    if (err.message) {
      console.log('\nMessage: ' + err.message)
    }
    if (err.stack) {
      console.log('\nStacktrace:')
      console.log('====================')
      console.log(err.stack);
    }
  } else {
    console.log('dumpError :: argument is not an object');
  }
}

try {
  not_defined.function_call();
} catch(err) {
  dumpError(err);
}

You could also extend the Object.prototype for improved accessability (so you could use err.dumpError()), although extending Object.prototype bears the risk of overwriting existing functionality.

like image 183
schaermu Avatar answered Nov 06 '22 15:11

schaermu