Node.js 了解节点中的流返回的内容
我正在做一个使用流的项目。实际上,我正在将ObjectMode中的一个可读对象流传输到一个转换流,转换流将其字符串化并将其转换为一个对象,然后将其发送到web框架的reply()方法 一切正常,但我很难准确地理解到底发生了什么。以下是工作示例:Node.js 了解节点中的流返回的内容,node.js,stream,Node.js,Stream,我正在做一个使用流的项目。实际上,我正在将ObjectMode中的一个可读对象流传输到一个转换流,转换流将其字符串化并将其转换为一个对象,然后将其发送到web框架的reply()方法 一切正常,但我很难准确地理解到底发生了什么。以下是工作示例: var foo = new FooModel(); var stream = foo.all(); reply(stream.pipe(ObjectTransform)); 在这里,我调用一个模型,该模型返回一个在对象模式下可读的流。然后,我将其输送
var foo = new FooModel();
var stream = foo.all();
reply(stream.pipe(ObjectTransform));
在这里,我调用一个模型,该模型返回一个在对象模式下可读的流。然后,我将其输送到一个ObjectTransform类,该类实际上只是一个转换流,它将从流中输送的对象字符串化
但这正是我难以理解的:
reply(stream.pipe(ObjectTransform));
stream.pipe(ObjectTransform)返回什么?我不明白为什么我不返回ObjectTransform流,因为这就是进行字符串化的原因
这对我来说更有逻辑意义,但显然,它不是这样工作的:
var foo = new FooModel();
var stream = foo.all();
var stringified_stream = stream.pipe(ObjectTransform);
stringified_stream.pipe(reply);
有人能帮我把它分解一下,让我更好地理解它吗?返回目标流。此模式允许链接pipe()
调用:
a.pipe(b).pipe(c).pipe(d)
// is equivalent to
a.pipe(b)
b.pipe(c)
c.pipe(d)
然后,您的代码可以归结为:
var foo = new FooModel();
var stream = foo.all();
// reply(stream.pipe(ObjectTransform));
stream.pipe(ObjectTransform);
reply(ObjectTransform);
在您写问题时,回答请求的“节点方式”是通过管道将可读流传输到可写流,例如ObjectTransform.pipe(reply)
。通过这种方式,您可以在代码示例中使用一行代码:newfoomodel().all().pipe(ObjectTransform).pipe(reply)
显然,这只适用于reply
是一个可写流的情况:在您的例子中,它是一个函数,我猜它是通过内部管道将其参数传输到另一个流的,因此前面的段落不适用于此
有关流的更多信息,请阅读