问题标签 [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.
javascript - 让节点模块返回数据“流”的技术?
我希望我问的问题是正确的,但本质上,NodeJS中有没有办法让CommonJS模块在(长)计算后返回数据流而不是最终的数据块?假设有不止一种方法,那么这些技术是什么?
例如,假设我有一个findPrimes
函数,写成CommonJS模块:
查找素数.js
如您所见,此函数返回一个包含所有小于其输入的素数的数组。它在计算完所有这些数字后返回数组。
所以,假设我在节点脚本中使用这个模块
index.js
当我使用 arg 运行上述脚本时25
,我得到以下(预期的)输出:
但是,假设我通过了一个更大的数字,比如 10,000,000
虽然这可行,但理想情况下,我希望程序在完成之前开始写出它计算的数字。
所以我的程序仍然需要一段时间才能运行,但它开始向屏幕输出信息的速度比“先计算一切,然后输出所有结果”要快得多。
我愿意接受任何和所有的技术,谢谢。
javascript - Node Stream - 将多个 Transform 流输出到单个 PassThrough 流
我必须定期下载/解析一堆 Json 数据,大约 1000~1.000.000 行。
每个请求的块限制为 5000。所以我想当时触发一堆请求,通过其自己的 Transfomer 流式传输每个输出以过滤掉键/值,然后写入将其输出写入的组合流数据库。
但是每次尝试它都不起作用,或者由于设置了许多事件侦听器而导致错误。如果我理解“最后一个管道”始终是链中的下一个参考,那么这似乎是正确的。
这是一些代码(更改了很多次,所以没有什么意义)。
问题是:将多个流连接到一个流是不好的做法吗?谷歌也没有展示很多关于它的内容。
谢谢!
brokerApi/getCandles.js
额外 - “消耗”流的其他文件(写入数据库)
数据层.js
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
node.js - 如何使用 gulp-tap 将文件名传递给 Gulp 管道中的下一个操作?
我有一个 Gulp 任务,它使用 gulp-inline-css 从 CSS 文件中获取 HTML 文件和内联样式。我的任务的原始版本对每个 HTML 文件使用相同的 CSS 文件。现在我想让任务根据它正在处理的 HTML 文件的文件名选择一个 CSS 文件。
我gulp-tap
用来获取文件名。该inliner()
函数获取 CSS 文件的路径并运行所有内联内容。
以下 Gulp 任务为每个文件运行 inliner() ,但似乎无法将结果注入流中。我尝试了几种不同的方法,但似乎无法将 inliner() 的结果返回到原始流中。
我是否错误地使用 gulp-tap?这似乎是一个非常简单的用例。
hapijs - 残骸:发布 mp4 时出现“错误:无效的请求负载 JSON 格式”
我正在尝试使用 Wreck 将 mp4 发布到 Hapi 端点,但我收到了Error: Invalid request payload JSON format
. 以下是路线。我怀疑我应该指定video/mp4
来自 Wreck 的内容类型,但文档没有告诉如何做到这一点,事件测试。请帮我找出那里有什么问题:
node.js - 转换流以将字符串添加到每一行
我像这样产生一个子进程:
我正在寻找一个转换流,以便我可以在子进程的每一行的开头添加类似“[子进程]”的内容,因此我知道标准输入输出来自子进程而不是父进程。
所以它看起来像:
有谁知道是否有这样的现有转换包或如何编写一个?
我有这个:
但我担心它在边缘情况下不起作用 - 一个块突发可能不包括整行(对于很长的行)。
看起来这个问题的答案在这里:https ://strongloop.com/strongblog/practical-examples-of-the-new-node-js-streams-api/
但有这个附录: https ://twitter.com/the1mills/status/886340747275812865
javascript - 与 `fetch()` 相比,使用流有什么优势?
我试图使用OneDrive JS SDK下载文件,所以我使用了 Microsoft 的代码:
因为我也想让它在浏览器中工作(不仅仅是在 Node 中),所以我首先尝试了一些用于浏览器的流库,但没有任何工作。最终,我只使用了 REST API 和fetch()
(SDK 是 REST API 的包装器)。
一个简单fetch(url)
的工作。所以我想知道,当单行可以完成这项工作时,为什么 MS 会遇到上面所有流代码的麻烦?
特别是流的性能比fetch()
. 例如,下载大文件时 fetch 会冻结应用程序,而流不会?还有其他区别吗?
gulp - Gulp:基于管道输出的条件执行?
当且仅当src目录中的一个或多个文件比目标目录中的任何文件都新时,我想构建一个 gulp 任务,它只执行一次外部构建工具 (mvn )。(在我的情况下,检查目标目录中一个特定文件的日期就可以了。)
我尝试将gulp-newer和gulp-exec之类的插件组合在一起,这似乎与我想要的很接近,但是当我像这样使用它们时,它运行外部命令的次数太多(每个源文件一次):
我理解它为什么会这样工作,但我如何弥合多个源文件之间的差距并只调用一次外部工具?
上的文档gulp-exec
说:
注意:如果你只是想运行一个命令,只运行命令,不要使用这个插件。
...但是如果从我的管道生成任何输出,我不知道如何使用 child_process.exec gulp.src | newer
。
node.js - Node.js 将文本作为 `spawnSync` 的标准输入传递
我认为这很简单,但以下内容无法按预期工作。
我想将数据wc
从 Node.
不幸的是,这会引发错误:
选项“stdio”的值“Readable { ... } 无效
来自的相关代码internal/child_process.js
不会立即揭示预期的有效选项是什么。
node.js - 使用 NodeJS 流式传输大型静态文件
我需要定期使用大型未格式化的只读文本文件,并检查每个文件中是否存在某些内容/单词。该文件由所有字母数字字符组成。end
但是,即使读取这些大型静态文件之一的流,我也遇到了问题。
下面是我在注意到它没有到达之后尝试运行的最简单代码的副本,end
这仍然不会触发end
事件。我可以看到许多data
被读取的迭代/块,但绝不是文件的所有数据,end
也从未被触发。
这太简单了,我开始怀疑这是否与我的环境有关,但是如果在上面的简单逻辑中识别为问题以读取流,请告诉我。
注意:如果我继续增加highWaterMark
选项,它会进一步通过文件,但仍然没有到达end
文件的。但是,这对到达或未到达文件末尾没有影响,而是控制每个“块”读取的数据量。