我有一些使用vm
模块和runInNewContext
函数并执行动态生成的JavaScript代码的代码。基本上是eval
的更安全的选择。
该代码(变量code
)可能包含语法错误,因此我想捕获它们并打印一些有用的信息。
try {
vm.runInNewContext(code, sandbox, filename);
}
catch (e) {
if (e instanceof SyntaxError) { // always false
console.log(e.toString()); // "SyntaxError: Unexpected token ||" for example
console.log(e.line); // how to get the line number?
}
}
我想用语法错误打印行号,但是我有两个问题:
SyntaxError
还是其他。 instaceof
不起作用(更新-我可以使用e.name === "SyntaxError"
)。 提前致谢。
更新:我可以从
e.stack
获取一些信息-但是,堆栈跟踪中最上面的调用是runInNewContext
(及其行号),但是我仍然找不到code
内部的行号,这导致了异常(SyntaxError
)。 最佳答案
1)使用if (e.name === "SyntaxError")
。
2)与错误相关的所有数据都保存在e.stack
中。
关于javascript - Node.js中SyntaxError的行号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20570477/