Как разобрать параметр ошибки в запросе обратного вызова? - PullRequest
0 голосов
/ 25 апреля 2019

Я намеренно вызываю ошибку в хранимой процедуре при определенных условиях, которую я хочу перехватить в своем API Node.js, который использует пакет Tedious.

Фрагмент кода из API:

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

В обратном вызове объекта «Запрос» выше есть параметр «err». "Typeof ()" возвращает "объект"; однако, когда я выкидываю его на консоль, это выглядит так:

**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, но, как вы можете видеть, данные «RequestError» не заключены в кавычки, и нет запятой после текста «240: 10)» непосредственно перед элементом «message». Я не уверен, является ли это ошибкой в ​​TDS или я просто что-то упускаю, но я не могу получить доступ ни к одному из участников, как есть. Мне пришлось бы преобразовать его в строку и разобрать, что хорошо, но не очень элегантно.

Предложения

1 Ответ

0 голосов
/ 25 апреля 2019

Как видите, данные «RequestError» не заключены в кавычки и не запятая после текста «240: 10)»

Это артефакты консоли, выводящей сообщение об ошибке. Вы можете попробовать это сами с чем-то вроде следующего:

$ 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...