节点异常显示格式

时间:2017-04-09 20:43:55

标签: javascript node.js exception

在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)

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

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

1 个答案:

答案 0 :(得分: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),即可完成所需的操作。我认为您需要在必需的文件中执行此操作,以便在nodejs解析器尝试解析您的错误代码之前定义它。

更新

在与SyntaxError()进行一些讨论之后,我上面提出的建议可能无法奏效。

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