3

require を使用して Node.js モジュールをロードしています。これにより、構文エラー (エラー オブジェクト) がスローされます。

エラーが発生したファイル内の場所を取得する方法はありますか?

スタック (以下) は表示されますが、位置情報はありません。サブスタックのnode-syntax-errorを使用できることはわかっていますが、Javascript Error オブジェクトから同様の位置情報を取得する方法はありますか?

SyntaxError: Unexpected identifier
at Module._compile (module.js:437:25)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:362:17)
at require (module.js:378:17)
... // the rest is in my code

編集:

以下の Vadim のコメントによると、はい、それは私がやりたいと思っていることです。ノードが適切なエラーをスローすることがわかりました。test.jsあなただけを含むファイルを持つabcと、ノードからエラーが発生します

ReferenceError: abc is not defined
    at Object.<anonymous> (test.js:1:63)
    at Module._compile (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

ここで問題は、このエラー (node module.js モジュールが使用する) を取得する必要のないノード API があるchild_process.spawn('node', ['test.js'])かどうかです。

4

4 に答える 4

3

nodeSyntaxError を含むファイルを使用して簡単に実行し、コンソール出力を確認できます。

于 2012-08-20T11:39:15.467 に答える
0

エラースタック

エラーには、スタック トレースを格納する「stack」プロパティがあります。

try {
    throw new Error("with some message");
}
catch(err) {
    // print error's stack trace to stder
    console.error(err.stack);
}

これを「/home/myusername/test.js」というファイルで実行します

node /home/myusername/test.js

以下を出力します

Error: with some message
    at Object.<anonymous> (/home/myusername/test.js:2:11)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)
于 2013-04-19T01:39:17.507 に答える
0

@laconbassの答えは私にとってはうまくいきます。

err.stack

ブログ フレームワークを試してみたところ、500 内部サーバー エラーが発生しました。うまくいけば、コンソールを置きます:

 app.use(function(error, req, res, next) {
    res.status(500).render('500');
      console.log(error);
  });

説明的ではないエラーが表示されました:

TypeError: Cannot read property 'replace' of undefined

数分間の調査の後、私はこの答えを見つけたので、試しました:

 app.use(function(error, req, res, next) {
    res.status(500).render('500');
      console.log(error.stack);
  });

そして、エラーのソースポイントを見ることができました:(Object.exports.replace)

TypeError: Cannot read property 'replace' of undefined
    at Object.exports.replace (/.../some_folder/node.js-blog-engine/node_modules/swig/lib/filters.js:411:15)
    at eval (eval at <anonymous> (/.../some_folder/node.js-blog-engine/node_modules/swig/lib/swig.js:498:13), <anonymous>:41:63)
    at Object.exports.each (/.../some_folder/node.js-blog-engine/node_modules/swig/lib/utils.js:45:11)
    at eval (eval at <anonymous> (/.../some_folder/node.js-blog-engine/node_modules/swig/lib/swig.js:498:13), <anonymous>:26:10)
    at Object.eval [as tpl] (eval at <anonymous> (/.../some_folder/node.js-blog-engine/node_modules/swig/lib/swig.js:498:13), <anonymous>:85:3)
    at compiled (/.../some_folder/node.js-blog-engine/node_modules/swig/lib/swig.js:619:18)
    at /.../some_folder/node.js-blog-engine/node_modules/swig/lib/swig.js:559:20
    at /.../some_folder/node.js-blog-engine/node_modules/swig/lib/swig.js:690:9
    at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:380:3)

これは構文エラーではないことはわかっていますが、javascript/node エラーの場所を見つけるのに役立つ可能性があります。

私はnodejsの初心者です。

これが役立つことを願っています。

于 2016-07-31T03:14:20.880 に答える