Какой объект является ошибкой node-postgres? Почему node console.log и JSON.stringify обрабатывают это по-разному?

console.log выводит это так:

{ [error: syntax error at or near "step"]
  length: 86,
  name: 'error',
  severity: 'ERROR',
  code: '42601',
  detail: undefined,
  hint: undefined,
  position: '62',
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  file: 'scan.l',
  line: '1001',
  routine: 'scanner_yyerror' }

но JSON.stringify не видит повествовательной части ошибки,

{"length": 86, "name": "error", "severity": "ERROR", "code": "42601", "position": "62", "file": "scan.l", " строка ":" 1001 "," подпрограмма ":" scanner_yyerror "}

Я не могу понять, как получить эту "ошибку: столбец" undefined "не существует" при чтении вики (https://github.com/brianc/node-postgres/wiki/Error-handling, http://nodejs.ru/doc/v0.4.x/stdio.html#console.log)

Код такой:

   client.query(selstring, function(err, result) {
   if(err){
     res.send(JSON.stringify(err));
     console.log(err);
   }else{

Благодарность

ОБНОВЛЕНИЕ: err.toString() показывает error: syntax error at or near "step"


person fedd    schedule 27.02.2013    source источник
comment
Опубликуйте, пожалуйста, содержание selstring.   -  person robertklep    schedule 27.02.2013
comment
Я не думаю, что это действительно важно, но вот оно: select max(date)::character varying dt from calendar where11 step=0 . моя задача - получить описание ошибки. запрос намеренно неверный   -  person fedd    schedule 27.02.2013
comment
Да ладно, извините, я неправильно понял ваш вопрос :( Что возвращает err.toString()?   -  person robertklep    schedule 27.02.2013
comment
Мне посоветовали использовать toString (), и это помогло. в любом случае, будет оценен лучший метод работы с ошибками ...   -  person fedd    schedule 27.02.2013
comment
@robertklep, о, я не заметил, что вы тоже упомянули toString, вот голосование   -  person fedd    schedule 27.02.2013
comment
Все еще не совсем уверен, чего вы пытаетесь достичь. Если вам нужен рассказ, вы можете получить его с помощью toString (EDIT: err.message намного чище)   -  person robertklep    schedule 27.02.2013
comment
просто кажется немного неправильным, что toString() возвращает некоторую информацию, которую нельзя получить ни из одного поля объекта. (Я новичок в Node и JS в целом)   -  person fedd    schedule 27.02.2013
comment
Класс может перегрузить метод toJSON, чтобы решить для себя, что будет возвращено, когда вы вызовете JSON.stringify() в его экземплярах. Вот пример: jsfiddle.net/QmWfq   -  person robertklep    schedule 27.02.2013


Ответы (4)


Поскольку ошибка pg является подклассом стандартного объекта Js Error (), поэтому "описание" базовой ошибки доступно через сообщение err.message ...

console.log(new Error("hello world"));
[Error: hello world]
console.log(new Error("hello world").message);
hello world

Вы можете создать подкласс стандартного объекта Error для ваших собственных объектов ошибок, добавив Error.prototype

См. Сообщение Кевина Как создать пользовательскую ошибку в JavaScript? < / а>

person Paul Coleman    schedule 18.05.2015

Я уже давно пытаюсь понять то же самое.

Глядя на вывод JSON.stringify(err), кажется, что объект имеет массив как безымянный атрибут. Как вообще возможно создать объект с анонимным атрибутом? Однажды я некоторое время возился с этим, но не мог найти способа даже построить какой-либо объект, который мог бы генерировать аналогичную структуру из JSON.stringify.

Я обнаружил, что err.message действительно работает для доступа к строке, но я действительно не понимаю, почему, поскольку «сообщение» не отображается как атрибут в строковой версии. Если 'message' является атрибутом err, почему он не отображается в выводе от stringify? Если нет, то откуда это?

person user3495444    schedule 18.04.2014
comment
Я не знаю, почему люди голосуют против этого ответа. На самом деле это было очень полезно. Спасибо. - person Benji A.; 09.11.2019

Первым делом ставим консоль вроде

console.log (query.text);

Также см. Ссылку, можно использовать

http://dailyjs.com/2011/09/26/heroku/

person AmirtharajCVijay    schedule 20.08.2013

Простое решение - добавить параметр порта в ваше соединение, даже если это порт по умолчанию. У меня была такая же проблема. Я узнал о решении из этой проблемы с github.

var pg_conn_conf = {
  username: 'user',
  pass: 'pass',
  port: 5432,
  host: 'localhost',
  db: 'mydb'
};

Существует также еще один ответ на stackoverflow который предлагает расширить Error.prototype, к счастью, в этом случае вам не придется иметь дело с этим. Но это хороший трюк.

person SerkanSerttop    schedule 29.07.2014