为什么 isBuffer 对于不编码的 fs.readFileSync 调用返回 false



在节点(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) 清理输出。

在使用库(node-rsa(测试我使用Buffer.isBuffer((传递给它的密钥数据时,我遇到了类似的问题。 这在浏览器中工作正常,但在节点环境中失败,因为isBuffer((返回false。

就我而言,原因是 Node 的 Buffer.isBuffer(( 实现进行了严格的"实例"检查,而我传递了一个浏览器化的 Buffer 对象,该对象没有通过实例检查。

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

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

最新更新