我正在使用require加载Node.js模块。这会抛出语法错误(错误对象)。
有没有办法让文件中的位置出现错误?
我可以看到堆栈(下方),但我没有任何位置信息。我知道我可以使用substack的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
的{{1}}文件会导致节点出错
abc
现在问题是,是否有一个节点API要做这个错误(节点module.js模块使用),这样我就不必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
了?
答案 0 :(得分:3)
您可以使用包含SyntaxError的文件简单地运行node
并查看控制台输出。
答案 1 :(得分:0)
错误具有存储堆栈跟踪的“堆栈”属性。
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)
答案 2 :(得分: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的新手。
我希望这会有所帮助。
答案 3 :(得分:0)
您可以使用stacktracey
库。它打印好的callstacks和源代码行,还解析SyntaxError输出(在高于v4的Node中)。
例如,在尝试要求此文件(名为test_files/syntax_error.js
)时:
// next line contains a syntax error (not a valid JavaScript)
foo->bar ()
...抛出的错误的漂亮打印调用堆栈将是:
at (syntax error) test_files/syntax_error.js:2 foo->bar ()
at it test.js:184 try { require ('./test_files/syntax_error.js') }
at runCallback timers.js:781
at tryOnImmediate timers.js:743
at processImmediate [as _immediat timers.js:714
...通过解析Node中util.inspect
调用的原始输出生成第一行。
该库还提供对已解析调用堆栈内容的完整API访问,因此您可以将输出调整为您想要的任何内容。希望这会有所帮助。