web-dev-qa-db-ja.com

javascript node.jsがtry catchで行番号を取得していますか?

Node.jsスクリプトでtry catchを使用しています:

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

次のような出力が得られます。

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

これをより有益なものにする簡単な方法はありますか?行番号や関数名などを含めますか?

26
Mark

これらの[Getter/Setter]メンバーは、エラーオブジェクトで利用可能な詳細情報を示します。小さなヘルパー関数を使用して、これらのゲッター/セッターのコンテンツを簡単にダンプできます(実装は非常に簡単です。さらに洗練させるのはあなた次第です)

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);
}

Object.prototypeを拡張して既存の機能を上書きするリスクはありますが、Object.prototypeを拡張してアクセシビリティを向上させることもできます(err.dumpError()を使用できます)。

54
schaermu