如何解析请求回调中的错误参数?

时间:2019-04-25 19:49:02

标签: node.js tedious

在某些情况下,我故意在存储过程中触发错误,我想在使用Tedious程序包的Node.js API中捕获该错误。

API的代码段:

        let request = new Request(sql, (err)=>{
            if (err) {
                sqlerr = err;
                console.log(typeof(err));
                console.log("**RQ-ERROR**", err);
            }
        });

在上面的“ Request”对象的回调中,有一个“ err”参数。 “ typeof()”返回“ object”;但是,当我将其转储到控制台时,它看起来像这样:

**RQ-ERROR** { RequestError: Duplicate entry for specified period
    at RequestError (C:\inetpub\wwwroot\PersonnelApps\kudosapi\node_modules\tedious\lib\errors.js:32:12)
    at Parser.tokenStreamParser.on.token (C:\inetpub\wwwroot\PersonnelApps\kudosapi\node_modules\tedious\lib\connection.js:723:34)
    at emitOne (events.js:96:13)
    at Parser.emit (events.js:188:7)
    at Parser.parser.on.token (C:\inetpub\wwwroot\PersonnelApps\kudosapi\node_modules\tedious\lib\token\token-stream-parser.js:27:14)
    at emitOne (events.js:96:13)
    at Parser.emit (events.js:188:7)
    at addChunk (C:\inetpub\wwwroot\PersonnelApps\kudosapi\node_modules\readable-stream\lib\_stream_readable.js:297:12)
    at readableAddChunk (C:\inetpub\wwwroot\PersonnelApps\kudosapi\node_modules\readable-stream\lib\_stream_readable.js:279:11)
    at Parser.Readable.push (C:\inetpub\wwwroot\PersonnelApps\kudosapi\node_modules\readable-stream\lib\_stream_readable.js:240:10)
  message: 'Duplicate entry for specified period',
  code: 'EREQUEST',
  number: 50000,
  state: 1,
  class: 16,
  serverName: 'PERSODG2LNN52\\SQLEXPRESS',
  procName: 'CreateStatusReport',
  lineNumber: 44 }

这几乎看起来像一个JavaScript对象,但是,正如您所看到的,“ message”成员之前的文本“ 240:10)”后面没有引用“ RequestError”数据,也没有逗号。我不确定这是否是TDS中的错误,或者我只是丢失了某些东西,但无法按原样访问任何成员。我必须将其转换为字符串并解析它,这很好,但不是很优雅。

建议?

1 个答案:

答案 0 :(得分:0)

  

如您所见,文本“ 240:10)”后面没有引用“ RequestError”数据,也没有逗号

这些是控制台中注销错误消息的工件。您可以使用以下类似的方法自己尝试一下:

$ node
> console.log(new Error('this is an error object!'));
Error: this is an error object!
    at repl:1:13
    at Script.runInThisContext (vm.js:119:20)
    at REPLServer.defaultEval (repl.js:332:29)
    at bound (domain.js:395:14)
    at REPLServer.runBound [as eval] (domain.js:408:12)
    at REPLServer.onLine (repl.js:639:10)
    at REPLServer.emit (events.js:194:15)
    at REPLServer.EventEmitter.emit (domain.js:441:20)
    at REPLServer.Interface._onLine (readline.js:290:10)
    at REPLServer.Interface._line (readline.js:638:8)

我不确定该问题的预期结果是什么,但请尝试检查err.message属性,而不要使用typeof运算符。