我有一些使用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/

    10-11 08:19