问题标签 [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.
node.js - 如何在 NodeJS 中检测此流的结束
试图了解如何为 Firebase 加载程序使用此异步流。我正在寻找:
- 当我启用 Firebase Promise 时,即使最后一条记录输出到标准输出,该进程仍保持打开状态。
- 使用这样注释的 Firebase 代码,该过程将关闭,但最终事件不会写入控制台。
所以我猜 Firebase 会留下一些需要在进程退出之前关闭的连接,如果我能弄清楚如何检测管道的末端,我可能会这样做。
我现在已经评论了 Firebase 的内容以将其从问题中删除,但是鉴于此代码,我如何在管道完成后运行一些代码?因为它是 done 功能没有执行。
node.js - AWS 上的 node.js 流响应
我在 AWS (EC2) 有一个简单的 node.js Web 服务:
PDF 生成器只是简单地返回一个带有 Stream 类型 ( Promise<ReadableStream>
) 的 Promise。问题是,我无法以某种方式得到这个响应。JSON 响应有效,但流响应无效。我应该怎么做/检查来解决这个问题?谢谢!
javascript - 仅在收到 HTTP 200 时如何 pipe() npm-request?
我有以下代码:
它运行良好,但前提是文档从给定的 URL 成功下载。但是,如果出现任何 HTTP: 403、404 或任何其他错误,则会以零长度保存一个空文件!
.pipe()
只有在 HTTP: 200 响应而不使用任何额外的 HEAD 请求的情况下,我如何才能做到这一点?应该可以一口气搞定!
node.js - _read() 未在可读流上实现
这个问题是如何真正实现可读流的读取方法。
我有一个可读流的实现:
我收到此错误
events.js:136 抛出错误;// 未处理的“错误”事件 ^
错误 [ERR_STREAM_READ_NOT_IMPLEMENTED]:_read() 未在 Readable._read (_stream_readable.js:554:22) 处 Readable.read (_stream_readable.js:445:10) 在 resume_ (_stream_readable.js:825:12) 在 _combinedTickCallback (internal/process/next_tick.js:138:11) at process._tickCallback (internal/process/next_tick.js:180:9) at Function.Module.runMain (module.js:684:11) at startup (bootstrap_node. js:191:16) 在 bootstrap_node.js:613:3
错误发生的原因很明显,我们需要这样做:
我真的不明白如何实现 read 方法。
唯一有效的就是打电话
如果我尝试做这样的事情:
然后什么也没有发生 - 没有任何东西来自可读!
此外,这些文章说您不需要实现 read 方法:
https://github.com/substack/stream-handbook#creating-a-readable-stream
https://medium.freecodecamp.org/node-js-streams-everything-you-need-to-know-c9141306be93
我的问题是- 为什么在 read 方法中调用 push 什么都不做?唯一对我有用的就是在别处调用 readable.push() 。
javascript - Nodejs - 如何创建采用 JS 对象并转换为 JSON 的转换流
我有一个可读的流,它给了我对象:
我可以将可读的管道传输到转换流中:
问题是我收到此错误:
TypeError [ERR_INVALID_ARG_TYPE]:“块”参数必须是字符串或缓冲区类型之一。在 Transform.ondata (_stream_readable.js:642:20) 在 Transform.emit (events.js:159:13) 的 WriteStream.Socket.write (net.js:705:11) 接收到类型对象
我认为正在发生的事情是在转换流中,当transform()
被调用时,第一个参数(块)必须是字符串或缓冲区。
但是,我知道我可以打电话
this.push({foo:'bar'})
在转换方法中......只有传入的数据似乎被限制为字符串或缓冲区......
我的问题分为两部分:
有没有办法创建一个可以传递对象的转换流,而不仅仅是字符串或缓冲区?
如果 1 的答案是“否”,那么在转换流中将 JS 对象转换为 JSON 的可靠方法是什么?
可能会丢失一些调用,以便它接收对象而不是字符串。
node.js - 使用转换流将 JS 对象转换为 JSON
请注意,有许多转换流可以做到这一点:
JSON -> JS
但我希望创建一个可以执行以下操作的 Node.js 转换流:
JS -> JSON
我有一个可读的流:
可读流输出对象,而不是字符串。
我需要创建一个转换流,它可以过滤其中一些对象并将对象转换为 JSON,如下所示:
但是,由于某种原因,我的转换流不能接受转换方法的对象,只有字符串和缓冲区,我该怎么办?
我尝试添加这两个选项:
不幸的是,我的转换流仍然不能接受对象,只能接受字符串/缓冲区。
javascript - 使用 mock-cli 测试 readline 模块
我正在尝试使用 readline 为模块创建一个单元测试,它解释标准输入提供标准输出。
模块:
测试:
它没有通过测试,因为输出无效,并且它没有运行.on('line)
事件。
ava - 测试中未调用可读流`_read`
我有以下简化的 ava 测试用例。当我通过 ava 运行它时,它_read()
永远不会被调用(ONDATA 可以)。另一方面,当我将此测试主体(没有断言)作为节点脚本运行时,我总是_read()
按预期被调用。可能我错过了一些关键功能,请指教。
javascript - 如何使用节点变换将一个对象转换为另一个对象
我是 Node 流的新手,并试图弄清楚为什么事情没有按预期工作。我只是在练习,想做一个愚蠢的变换。
最后我运行脚本并通过标准输入输入:
我也试过:
但是循环将块视为字符串而不是对象。所以我看到如下输出:
我尝试了以下各种组合:
并且还在_transform()
使用:
butobj
从来都不是一个对象,而是一个字符串。
我的目标是在我的转换流中接收一个对象,改变它,然后输出它。但是我只能处理字符串,即使使用JSON.parse()
.
我在哪里错了?
更新 - 部分解决方案
问题出在我使用JSON.parse()
. 我试图解析:
哪个是有效的 JS,但不是有效的 JSON,呵呵!
然而,更大的问题仍然存在。我已将 Transform 流设置为: writableObjectMode = true
,但是当我这样做时:
我得到错误:
TypeError: Invalid data, chunk must be a string or buffer, not object
如果我做:
事情按预期工作。
但是,考虑到我已经在对象模式下设置了东西,这不应该在没有字符串化的情况下工作吗?
node.js - write()(没有回调)是否保留 node.js 写入流中的顺序?
我有一个 node.js 程序,我在其中使用流将信息写入 SFTP 服务器。像这样的东西(简化版):
注意我没有使用(可选)回调参数(在write() API 规范中描述),我不确定这是否会导致不良行为(即未按以下顺序写入的行:line1、line2、line3) . 换句话说,我不知道是否应该使用这种替代方案(更复杂的代码并且不确定效率是否更低):
(或使用async series()的等效替代方案)
根据经验,在我的测试中,我总是以所需的顺序写入文件(我的意思是,首先是 line1,然后是 line2,最后是 line3)。但是,如果这只是偶然发生,或者上面是使用 write() 的正确方法,我现在不知道。
我知道在流中写入通常是异步的(因为所有 I/O 工作都应该是)但我想知道 node.js 中的流是否保持内部缓冲区或类似的保持数据有序,所以每个 write() 调用都不会返回直到数据被放入这个缓冲区。
非常欢迎在实际程序中使用 write() 的示例。谢谢!