【问题标题】:Node exception display format节点异常显示格式
【发布时间】:2017-04-09 20:43:55
【问题描述】:

在 Node.js 中,当您抛出异常但没有捕获它时,默认情况下您会得到如下显示:

C:\tptp-parser\index.js:19
        throw e
        ^

SyntaxError: Unknown language (33:7)
    at err (C:\tptp-parser\index.js:14:10)
    at Object.parse (C:\tptp-parser\index.js:354:5)
    at read (C:\tptp-parser\tptp-parser.js:14:15)
    at Object.<anonymous> (C:\tptp-parser\tptp-parser.js:37:3)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)

前三行是源代码中引发异常的位置,然后是一条消息,然后是堆栈跟踪。我知道如何自定义消息(如上例所示);有没有办法同时自定义前三行?

也就是说,我正在编写一个解析器,如果我可以更改前三行来显示,而不是解析器中的代码行,而是正在解析的文件中的文本行,那将是理想的。有没有办法做到这一点?

【问题讨论】:

    标签: javascript node.js exception


    【解决方案1】:

    SyntaxError 是一个nodejs 内置函数。

    从 repl 调用它返回:

    > SyntaxError('here')
    SyntaxError: here
      at SyntaxError (native)
      at repl:1:1
      at sigintHandlersWrap (vm.js:22:35)
      at sigintHandlersWrap (vm.js:96:12)
      at ContextifyScript.Script.runInThisContext (vm.js:21:12)
      at REPLServer.defaultEval (repl.js:346:29)
      at bound (domain.js:280:14)
      at REPLServer.runBound [as eval] (domain.js:293:12)
      at REPLServer.<anonymous> (repl.js:545:10)
      at emitOne (events.js:101:20)
    

    您可以先将节点的默认SyntaxError(msg) 替换为您自己的SyntaxError(msg)。我认为您需要在所需文件中执行此操作,以便在 nodejs 解析器尝试解析您的错误代码之前定义它。

    更新

    在玩了一点SyntaxError() 之后,我上面的建议可能行不通。

    由于您正在编写解析器,您可以查看pegjs,它允许您自定义解析期间抛出的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 2019-05-18
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多