JSON错误对象

时间:2015-05-12 05:23:42

标签: javascript json node.js postgresql

我在node.js控制台脚本中使用pg-promise

节点版本:v0.10.38 pg-promise版本:1.1.4

由于无关紧要的错误配置问题,我收到了连接错误。但是我希望我的脚本能够通过对问题的丰富解释提醒我。

如果我将错误对象传递给错误处理程序回调并通过console.log()将其“按原样”发送到控制台,那么我可以看到文本“no pg_hba.conf entry for host”127.0.0.1“以标有“输出1”的方式看到。

但是,如果这似乎不是一个有效的JSON对象,我不知道如何访问具有该消息的属性。

此外,如果我在该对象上记录JSON.stringifgy()的结果,那么该信息就会消失。

这是pg-promise实现的错误吗?或者它是某种JSON隐藏属性,可以以任何方式访问?。

以下是该问题的复制品:

源代码:

var pgpLib = require('pg-promise');
var pgp = pgpLib({});
var db = pgp({
        host: "localhost",
        database: "__db_name__",
        user: "__db_user__",
        password: "__db_password__",
});

db.query("select 'foo'").then(
        function(){
                console.log ("Works!!");
        },
        function(err){
                console.log("ERROR!!", err); // (Output 1)
                // console.log("ERROR!!", JSON.stringify(err)); // (Output 2)
        }

);

输出1:

ERROR!! { [error: no pg_hba.conf entry for host "127.0.0.1", user "reports", database "ruminant", SSL off]
  name: 'error',
  length: 143,
  severity: 'FATAL',
  code: '28000',
  detail: undefined,
  hint: undefined,
  position: undefined,
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  schema: undefined,
  table: undefined,
  column: undefined,
  dataType: undefined,
  constraint: undefined,
  file: 'auth.c',
  line: '493',
  routine: 'ClientAuthentication' }

输出2:

ERROR!! {"name":"error","length":143,"severity":"FATAL","code":"28000","file":"auth.c","line":"493","routine":"ClientAuthentication"}

修改

正如Trott所说(谢谢),我可以通过使用.toString()方法(或强制字符串强制)来获取该字符串。

但是,无论如何,以下输出对我来说似乎不是有效的JSON。

我想通过在对象的原型中重载.toString()方法可以达到同样的效果,但我不能:

var foo = function(){};

Object.defineProperty(foo.prototype, "toString", {
    enumerable: false,
    value: function() {
        return "Some hidden data";
    }
});

var bar = new foo();
console.log("1:", bar, bar.toString());
bar.otherStuff = "foobar";
console.log("2:", bar, bar.toString());

输出:

1: {} Some hidden data
2: { otherStuff: 'foobar' } Some hidden data

1 个答案:

答案 0 :(得分:2)

要从Error对象获取错误消息而不使用其他所有内容,请使用.toString()

console.log('ERROR! ', err.toString());

如果使用字符串连接,它应该具有相同的效果:

console.log('ERROR! ' + err);

后一种方式似乎是pg-promise README example code处理错误的方式。

我已经使用pg-promise对它们进行了测试并且它们有效,但是它们打印出“错误:”作为其消息的一部分,因此您不需要包含“错误! “就像我一样。