Node.js流 - 将缓冲区转换为字符串会得到[object Object]

5

我希望能够过滤输出内容,但是我在将缓冲区转换为字符串时遇到了问题。 console.log(JSON.stringify(obj.toString())); 一直输出 [object Object] ,这个结果无法使用。请问如何将缓冲区转换为字符串,以便我可以将其内容过滤并输出到标准输出?

//inject 'bower and javascript' files or just 'javascript' files
function injectStream(sourceStream, filesStream) {
    sourceStream
        .pipe(injector(filesStream, { ignorePath: 'app', addRootSlash: false }))
        .pipe(gulp.dest(INDEX_PATH_PARENT))
        .pipe(through2.obj(function(obj, enc, next) {
            console.log(JSON.stringify(obj.toString()));
            this.push(obj.contents);
            next();
    })).pipe(process.stdout)
}
1个回答

4

through2.obj 生成一个对象流(或对象模式的流)。在对象流中,流动的是对象而不是缓冲区。你得到的不是缓冲区,而是一个对象 obj。这就是为什么它的 toString 方法会返回 [object Object]。也许你要找的是 obj.contents


有趣的是,console.log(obj.contents) 给了我 <Buffer 3c 68 74 6d 6c 20 6c 61 6e 67 3d 22 65 6e 22 3e 0a 09 3c 68 65 61 64 3e 0a 09 09 3c 6d 65 74 61 20 63 68 61 72 73 65 74 3d 22 75 74 66 2d 38 22 20 2f 3e ...> - dman
2
调用缓冲区上的 toString 方法? - spelufo
1
console.log(obj.contents.toString()); 可以工作。但是它会一次性给出整个内容。我希望能够逐行输出,因为我认为它应该使用 next() 迭代。 - dman
1
你应该注意一些关于Node的流(streams)的问题。此外,Substack的流手册也提供了介绍。 - spelufo
为什么我无法通过 console.log(obj) 查看对象属性?即使使用了 json.stringify 也不行。这让故障排除变得困难。 - dman
1
可能对象自身的属性和从其原型继承的属性之间存在区别。请查看 obj.prototypeobj.__proto__ - spelufo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接