问题标签 [node.js-stream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 监听 Node.js 流“可读”事件导致源不被读取
上面的代码按预期工作并输出
但是当我向事件“可读”添加一个监听器时,没有数据被读取。
输出:
似乎 SourceReader._read 在源的可读事件被触发之前被调用并且可能什么也没读。但是随后源可读事件触发并调用 SourceReader.read() 但这一次不会进入 SourceReader._read 并完成。
为什么会这样?那么,如果阅读器的源也触发了可读事件,我该如何处理可读事件呢?
谢谢回答。
javascript - NodeJS:使用可读事件和排水事件
我正在尝试使用节点的可读流读取一个大文件(~800 MB)。我订阅了“可读”事件,在获取数据时我正在写入响应,然后等待排水事件再次读取数据。但流失事件仅被触发 3-4 次。如果有什么问题,请告诉我。
node.js - request() 返回后如何在 Node 中写入图像
这感觉像是一个显而易见的问题,但让我感到困惑:我想要一个 Node 函数,它可以通过 URI 下载资源。我需要它适用于几种不同的内容类型,而用户无需指定它是哪种类型。
当您知道它将成为图像时,我知道如何通过管道request
传输fs.createWriteStream
,但当您已经从请求中调用回调时,我不知道如何处理它。这就是我所在的位置:
这个对上一个问题的回答暗示了以下几点:
request
但是如果我还不知道我会得到什么类型的响应,我就不能传递“二进制” 。
更新
根据建议的答案,在事件处理程序中将“关闭”更改为“完成”确实会触发回调:
这确实写入了图像文件,但不正确:
javascript - 在 Node.js 中限制同时传输的 HTTP 请求
我正在编写一个节点脚本来批量下载文件。在示例中,这些是来自文件的图像,其中每一行都有一个文件名和一个 URL。我希望这个脚本可以扩展到数百万个 URL 来下载。
Node JS 流似乎是实现此目的的好方法,因为我们可以通过管道输入 URL 列表,http 请求 URL,并将响应写入文件。
该脚本使我的计算机崩溃,并丢失了空白 jpg 文件。这些pipe()
方法似乎没有处理背压;似乎该脚本正在立即并行请求所有 URL。我怎样才能限制同时 HTTP 请求的数量,以便在扩展以下载大量 URL 时它可以一致地运行?谢谢。
build - 如何重命名 gulp 流中的 cwd、base 和 path,以便在需要时保存?
我有一个包含文件的 gulp.src 流:
我想将文件另存为:
如何重命名流中的 cwd、base 和 path,以便在需要时保存?
node.js - 在写回调之前调用流可写端
使用可读流、转换流和可写流,我有一个奇怪的行为,我的 Writer.end() 在 _write 回调之前被调用。
在这里,我复制/粘贴了错误代码的示例:
和输出:
node.js - Node.Js Through2-修改流
我正在尝试使用through2
. 我有一个流是 index.html 文件,我正在尝试逐行修改 index.html 内容,并-------
在每一行上添加一个。我有:
我目前遇到的问题在数组方法this.push()
中不可用。blah.forEach()
关于如何实现修改 index.html 流的任何建议?
node.js - 从标准输入(node.js)读取行或整个缓冲区
我正在 node.js 中开发一个交互式控制台界面,它解析和编译输入。为此,我正在使用 readline.question:
现在程序还应该能够从系统外壳读取通过管道传输到标准输入的输入,即:
它解析输入,但使用 readline.question 会逐行解析。这会破坏一些跨越不同行的输入代码。
我想改变程序的行为,以便在交互使用时,它会逐行处理(就像现在一样),但是当一个文件通过管道传输到它时,它应该处理一个块中的整个文件。所以我需要以某种方式检查换行后是否有更多数据。有人可以指出我正确的方向吗?
node.js - 将文件解压到 S3 失败,不知道为什么
(下面的新信息)我正在尝试设置一个 lambda 函数,该函数通过解压缩上传的 tgz 文件并将结果写回 S3 来对它们做出反应。解压缩和解压缩工作正常,但上传到 S3 失败:
当我写入 S3 时会发生此错误,但如果我将文件本地写入磁盘它可以工作,因此管道是正确的。
这是演示该问题的代码:
如果将代码设置为写入 S3,则会失败并出现上述错误,如果将提取的文件写入本地,则会成功。ENTRY 是一个流,根据文档应该在上传的 Body 参数中接受。我在 ManagedUpload 中放了一条打印语句,失败的地方,并确认 self.body 是一个流:
返回
我对 aws 和 node.js 很陌生,所以这可能存在一个基本问题,但我花了一天时间并没有找到它。我使用 unzip 而不是 gzip 进行了上传调用,它起作用了(使用 lambda 函数在 S3 中解压缩档案真的很慢)有人能指出我在这段代码中做错了什么吗?
谢谢
我想我对这一点理解得更好一些。我把管道分成几块,逐一查看。问题是 tar.Parse 使用 fstream 而不是流。如果我查看 .pipe(tar.Parse()) 语句的返回,它是一个流,但它不是 stream.Readable 或 stream.Writable。fstream 没有定义 read() 方法(它的 reader 是基于 Stream,它不是 stream.Readable),所以基于 Stream 的 tar.Parse 也没有。
所以问题的一个改进是,这是 fstream 中的一个错误,还是 fstream 不打算成为一个流?我认为这是一个错误-来自自述文件:
“像 FS 流,但在它们上面有统计信息,并支持目录和符号链接,以及普通文件。此外,您可以使用它来设置文件的统计信息,即使您不更改其内容,或创建符号链接等。”