为什么isBuffer在没有编码的情况下为fs.readFileSync调用返回false

时间:2017-05-27 11:45:03

标签: node.js buffer fs instanceof

在节点(v6.3.1)中,我正在使用fs.readFileSync(path)读取文件。

结果(data)是一个类似缓冲区的对象,当我打印到STDOUT(console.log(data))时,我得到:

{"type":"Buffer","data":[45,45,45,...]}

但是打电话给

data instanceof Buffer

Buffer.isBuffer(data)

我总是得到false

为什么呢?如何测试返回的数据是否为缓冲区?

上下文:我只想避免长时间转储到STDOUT并使用JSON.stringify(data, replacer)通过缩短缓冲区输出来清理输出。

1 个答案:

答案 0 :(得分:0)

我在使用库(node-rsa)时遇到了类似的问题,该库测试了我使用Buffer.isBuffer()传递给它的关键数据。这在浏览器中运行良好,但在Node环境中失败,因为isBuffer()返回false。

在我的情况下,原因是Node的Buffer.isBuffer()实现了严格的'instanceof'检查,并且我传递了一个browserified Buffer对象,它没有通过instanceof检查。

我没有尝试更改node-rsa,而是通过删除对缓冲区库的直接依赖来解决我的问题。

您可以考虑在代码中使用is-buffer module而不是Buffer.isBuffer()。