Console.log(responseObject) 输出无法通过对象引用的隐藏数据,这是我拼命想做的

Console.log(responseObject) outputs hidden data that can't be referenced via the object which is what I am desperatly trying to do

我正在尝试检测与网站的 SSL 握手何时失败。现在,我有一个如下所示的响应对象:

let r = request({url:"url", method: "HEAD", ...}, (res) => { console.log(res) })

这会输出以下日志:

{ Error: write EPROTO 139898579974016:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:1494:SSL alert number 40
139898579974016:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:659:
at exports._errnoException (util.js:1020:11)
at WriteWrap.afterWrite (net.js:800:14) code: 'EPROTO', errno: 'EPROTO', syscall: 'write' }

看起来很简单吧?只需从响应对象中检索消息。但是,当我在响应对象中查找键时,找不到消息。

console.log(Object.keys(res)) // [ 'code', 'errno', 'syscall' ]
r.on("error") {console.log(error)} // {code: 'EPROTO', errno: 'EPROTO', syscall: 'write' }

那么如何检索记录的其余内容?

我正在使用 New Relic Synthetics 查询网站,它针对该网站运行 Selenium Webdriver 3.50(使用 Node 6.11.2)实例。我认为这不会有什么不同,因为我们正在谈论的是 console.log() 。虽然它确实限制了我的选择,但仅限于 New Relic 批准的 nodejs 模块,但如果有任何非标准的东西会有所帮助,我会想办法测试它。

Error 对象中的主要信息在其 message 属性 上。

如果还有其他属性,它们可能不可枚举,and/or它们可能会被继承。 Object.keys 不会向您显示不可枚举或继承的属性。

要查看不可枚举的属性(和可枚举的属性,但不是由 Symbols 命名的属性),您可以使用 Object.getOwnPropertyNames. To see Symbol-named properties (you probably don't need these), you can use Object.getOwnPropertySymbols. If you need to see inherited ones, you can use that in a loop where you use Object.getPrototypeOf 沿着原型链向上移动。

// Assuming `res` is the starting point, and assuming you don't want properties
// from `Object.prototype` (if it's in the prototype chain)
let allPropertyNames = [];
for (let obj = res; obj && obj !== Object.prototype; obj = Object.getPrototypeOf(obj)) {
    allPropertyNames.push(...Object.getOwnPropertyNames(obj));
}