问题标签 [node-streams]

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.

0 投票
2 回答
1549 浏览

javascript - 让节点模块返回数据“流”的技术?

我希望我问的问题是正确的,但本质上,NodeJS中有没有办法让CommonJS模块在(长)计算后返回数据流而不是最终的数据块?假设有不止一种方法,那么这些技术是什么?

例如,假设我有一个findPrimes函数,写成CommonJS模块:

查找素数.js

如您所见,此函数返回一个包含所有小于其输入的素数的数组。它在计算完所有这些数字返回数组。

所以,假设我在节点脚本中使用这个模块

index.js

当我使用 arg 运行上述脚本时25,我得到以下(预期的)输出:

但是,假设我通过了一个更大的数字,比如 10,000,000

虽然这可行,但理想情况下,我希望程序在完成之前开始写出它计算的数字。

所以我的程序仍然需要一段时间才能运行,但它开始向屏幕输出信息的速度比“先计算一切,然后输出所有结果”要快得多。

达到这种效果的最佳方法是什么?承诺

我愿意接受任何和所有的技术,谢谢。

0 投票
1 回答
615 浏览

javascript - Node Stream - 将多个 Transform 流输出到单个 PassThrough 流

我必须定期下载/解析一堆 Json 数据,大约 1000~1.000.000 行。

每个请求的块限制为 5000。所以我想当时触发一堆请求,通过其自己的 Transfomer 流式传输每个输出以过滤掉键/值,然后写入将其输出写入的组合流数据库。

但是每次尝试它都不起作用,或者由于设置了许多事件侦听器而导致错误。如果我理解“最后一个管道”始终是链中的下一个参考,那么这似乎是正确的。

这是一些代码(更改了很多次,所以没有什么意义)。

问题是:将多个流连接到一个流是不好的做法吗?谷歌也没有展示很多关于它的内容。

谢谢!

brokerApi/getCandles.js

额外 - “消耗”流的其他文件(写入数据库)

数据层.js

0 投票
2 回答
1191 浏览

node.js - 获取ReadStream的hash和流的输出数据

我有一个想多次阅读的 ReadStream。readStream 是使用 fs.createReadStream 创建的。

我第一次使用它来获取它的md5哈希值,我正在使用 module hasha, function fromStream,第二次我使用它FormData来将文件上传到虚拟主机。

我怎样才能使用这个 ReadStream 来做这两件事呢?

它没有按应有的方式将内容记录到控制台,可能是因为hasha.fromStream它正在pipe处理流。如果我不执行hasha.fromStream它工作正常,则会记录块。

我正在使用的模块hasha位于 github 上:https ://github.com/sindresorhus/hasha/blob/master/index.js#L45

我不想在获取哈希之前将数据保存到缓冲区,因为我将在大文件中使用它。

我还制作了一个 runkit 脚本来显示我的问题,你可以在那里玩: https ://runkit.com/5942fba4653ae70012196b77/5942fba4653ae70012196b78

0 投票
2 回答
1094 浏览

node.js - 如何使用 gulp-tap 将文件名传递给 Gulp 管道中的下一个操作?

我有一个 Gulp 任务,它使用 gulp-inline-css 从 CSS 文件中获取 HTML 文件和内联样式。我的任务的原始版本对每个 HTML 文件使用相同的 CSS 文件。现在我想让任务根据它正在处理的 HTML 文件的文件名选择一个 CSS 文件。

gulp-tap用来获取文件名。该inliner()函数获取 CSS 文件的路径并运行所有内联内容。

以下 Gulp 任务为每个文件运行 inliner() ,但似乎无法将结果注入流中。我尝试了几种不同的方法,但似乎无法将 inliner() 的结果返回到原始流中。

我是否错误地使用 gulp-tap?这似乎是一个非常简单的用例。

0 投票
0 回答
2076 浏览

hapijs - 残骸:发布 mp4 时出现“错误:无效的请求负载 JSON 格式”

我正在尝试使用 Wreck 将 mp4 发布到 Hapi 端点,但我收到了Error: Invalid request payload JSON format. 以下是路线。我怀疑我应该指定video/mp4来自 Wreck 的内容类型,但文档没有告诉如何做到这一点,事件测试。请帮我找出那里有什么问题:

0 投票
2 回答
1944 浏览

node.js - 转换流以将字符串添加到每一行

我像这样产生一个子进程:

我正在寻找一个转换流,以便我可以在子进程的每一行的开头添加类似“[子进程]”的内容,因此我知道标准输入输出来自子进程而不是父进程。

所以它看起来像:

有谁知道是否有这样的现有转换包或如何编写一个?

我有这个:

但我担心它在边缘情况下不起作用 - 一个块突发可能不包括整行(对于很长的行)。

看起来这个问题的答案在这里:https ://strongloop.com/strongblog/practical-examples-of-the-new-node-js-streams-api/

但有这个附录: https ://twitter.com/the1mills/status/886340747275812865

0 投票
2 回答
826 浏览

javascript - 与 `fetch()` 相比,使用流有什么优势?

我试图使用OneDrive JS SDK下载文件,所以我使用了 Microsoft 的代码:

因为我也想让它在浏览器中工作(不仅仅是在 Node 中),所以我首先尝试了一些用于浏览器的流库,但没有任何工作。最终,我只使用了 REST API 和fetch()(SDK 是 REST API 的包装器)。

一个简单fetch(url)的工作。所以我想知道,当单行可以完成这项工作时,为什么 MS 会遇到上面所有流代码的麻烦?

特别是流的性能比fetch(). 例如,下载大文件时 fetch 会冻结应用程序,而流不会?还有其他区别吗?

0 投票
1 回答
52 浏览

gulp - Gulp:基于管道输出的条件执行?

当且仅当src目录中的一个或多个文件比目标目录中的任何文件都新时,我想构建一个 gulp 任务,它只执行一次外部构建工具 (mvn )。(在我的情况下,检查目标目录中一个特定文件的日期就可以了。)

我尝试将gulp-newergulp-exec之类的插件组合在一起,这似乎与我想要的很接近,但是当我像这样使用它们时,它运行外部命令的次数太多(每个源文件一次):

我理解它为什么会这样工作,但我如何弥合多个源文件之间的差距并只调用一次外部工具?

上的文档gulp-exec说:

注意:如果你只是想运行一个命令,只运行命令,不要使用这个插件。

...但是如果从我的管道生成任何输出,我不知道如何使用 child_process.exec gulp.src | newer

0 投票
1 回答
1843 浏览

node.js - Node.js 将文本作为 `spawnSync` 的标准输入传递

我认为这很简单,但以下内容无法按预期工作。

我想将数据wc从 Node.

文档和其他SO 问题似乎表明传递 Stream 应该有效:

不幸的是,这会引发错误:

选项“stdio”的值“Readable { ... } 无效

来自的相关代码internal/child_process.js不会立即揭示预期的有效选项是什么。

0 投票
1 回答
170 浏览

node.js - 使用 NodeJS 流式传输大型静态文件

我需要定期使用大型未格式化的只读文本文件,并检查每个文件中是否存在某些内容/单词。该文件由所有字母数字字符组成。end但是,即使读取这些大型静态文件之一的流,我也遇到了问题。

下面是我在注意到它没有到达之后尝试运行的最简单代码的副本,end这仍然不会触发end事件。我可以看到许多data被读取的迭代/块,但绝不是文件的所有数据,end也从未被触发。

这太简单了,我开始怀疑这是否与我的环境有关,但是如果在上面的简单逻辑中识别为问题以读取流,请告诉我。

注意:如果我继续增加highWaterMark选项,它会进一步通过文件,但仍然没有到达end文件的。但是,这对到达或未到达文件末尾没有影响,而是控制每个“块”读取的数据量。