Node.js中SyntaxError的行号

Mar*_*jer 13 javascript v8 exception node.js

我有一些使用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?
    }
}
Run Code Online (Sandbox Code Playgroud)

我想用语法错误打印行号,但我有两个问题:

  • 我不知道如何识别异常是否是SyntaxError别的.instaceof不起作用(更新 - 我可以使用e.name === "SyntaxError").
  • 即使我能够识别它,我怎么能得到行号?可能吗?

提前致谢.

更新:我可以从中获取一些信息e.stack- 但是,堆栈跟踪中最顶层的调用是runInNewContext(带有其行号),但我仍然找不到内部的行号code,这导致了异常(SyntaxError).

fre*_*ish 3

1) 使用if (e.name === "SyntaxError").

2) 与错误相关的所有数据都保存在e.stack.