2017-08-03 6 views
1

Iはasinc一連の動作を行うインナーと呼ばれる機能を有している:node.jsのエラースタックトレースに発信者の詳細を追加するにはどうすればよいですか?

function inner(input) { 
    return step1(input) 
    .then(step2) 
    .then(step3) 
    .catch((e) => { 
     throw e 
    }) 
} 

私は内側からエラーを再スローので、私は、発信者レベルのエラーを扱うことができます。問題は、私はエラーをログに記録する場合、スタックトレースのみ機能インナーではなく、呼び出し元のファイルが表示されていることである

app.get('/', function(req, res){ 
    inner(req) 
    .then(result => { 
     res.render('foo', result) 
    }).catch((e) => { 
     res.render('error', e); 

     //eventually this would be changed to logger.error(e) 
     console.log(e); 
    }) 
}) 

:ここ

は簡単な例です。コードでこの関数を2回使用するとエラーが発生した場合、コードのどの部分を呼び出すかを知る必要があります。

エラースタックトレースに発信者情報を追加するにはどうすればよいですか?非標準機能として

答えて

0

非標準機能

Error.prototype.stackので、文書のタグには、異なるプラットフォームは異なる動作やフォーマットを有することができます。

例えば、私は、次のファイルをChromeでそれをテスト:

index.htmlを

<!doctype html> 
<html> 
    <head> 
    <script src="inner.js"></script> 
    <script src="caller1.js"></script> 
    <script src="caller2.js"></script> 
    </head> 
    <body></body> 
</html> 

inner.js

function inner() { 
    return new Promise((resolve, reject) => { 
    reject(new Error('Oh no')) 
    }).catch(e => { throw e }) 
} 

caller1.jscaller2.js

inner().catch(e => { console.log(e.stack) }) 

そしてコンソールでの結果:

Error: Oh no 
    at Promise (setup.js:3) 
    at Promise (<anonymous>) 
    at inner (setup.js:2) 
    at caller1.js:1 
Error: Oh no 
    at Promise (setup.js:3) 
    at Promise (<anonymous>) 
    at inner (setup.js:2) 
    at caller2.js:1 

両方inner()と、呼び出し側スタックトレースで示したされています。

あなたの場合には回避策

、手動で呼び出し側のcatch()でそれを記録することがあります。

ブラウザでコードを実行する場合は、document.currentScriptとそのsrcプロパティを使用してファイル名を取得します。

編集:Node.jsの

に私はNode.jsのをV8.1.2でそれをテストし、inner()と、発信者は両方が同様に表示されていました。

ところで、documentでの段落は私のattectionを得た:

フレームはJavaScriptのみ 機能のために生成されていることに注意することが重要です。例えば、実行を同期自体のJavaScript 関数を呼び出しcheetahify呼ば C++アドオン機能を通過する場合、スタックは

これはあってもよいがトレースに、cheetahifyコールを表すフレームは 存在しません私たちは一貫性のない結果を得る理由。

いずれにしても、ファイル名を手動でログに記録する必要があります。ファイル名は、インポートと実行の方法によって異なります。

+0

「さまざまなプラットフォームで動作とフォーマットが異なる可能性があります」とコメントした後私はnode.jsに興味があることを忘れていたことに気づいた –

+0

Node.jsの部分が追加されました。 – Microloft

関連する問題