问题标签 [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 投票
0 回答
280 浏览

node.js - 如何在 NodeJS 中检测此流的结束

试图了解如何为 Firebase 加载程序使用此异步流。我正在寻找:

  • 当我启用 Firebase Promise 时,即使最后一条记录输出到标准输出,该进程仍保持打开状态。
  • 使用这样注释的 Firebase 代码,该过程将关闭,但最终事件不会写入控制台。

所以我猜 Firebase 会留下一些需要在进程退出之前关闭的连接,如果我能弄清楚如何检测管道的末端,我可能会这样做。

我现在已经评论了 Firebase 的内容以将其从问题中删除,但是鉴于此代码,我如何在管道完成后运行一些代码?因为它是 done 功能没有执行。

0 投票
0 回答
20 浏览

node.js - AWS 上的 node.js 流响应

我在 AWS (EC2) 有一个简单的 node.js Web 服务:

PDF 生成器只是简单地返回一个带有 Stream 类型 ( Promise<ReadableStream>) 的 Promise。问题是,我无法以某种方式得到这个响应。JSON 响应有效,但流响应无效。我应该怎么做/检查来解决这个问题?谢谢!

0 投票
1 回答
2558 浏览

javascript - 仅在收到 HTTP 200 时如何 pipe() npm-request?

我有以下代码:

它运行良好,但前提是文档从给定的 URL 成功下载。但是,如果出现任何 HTTP: 403、404 或任何其他错误,则会以零长度保存一个空文件!

.pipe()只有在 HTTP: 200 响应而不使用任何额外的 HEAD 请求的情况下,我如何才能做到这一点?应该可以一口气搞定!

0 投票
4 回答
18278 浏览

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() 。

0 投票
0 回答
3044 浏览

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. 有没有办法创建一个可以传递对象的转换流,而不仅仅是字符串或缓冲区?

  2. 如果 1 的答案是“否”,那么在转换流中将 JS 对象转换为 JSON 的可靠方法是什么?

可能会丢失一些调用,以便它接收对象而不是字符串。

0 投票
1 回答
4299 浏览

node.js - 使用转换流将 JS 对象转换为 JSON

请注意,有许多转换流可以做到这一点:

JSON -> JS

但我希望创建一个可以执行以下操作的 Node.js 转换流:

JS -> JSON

我有一个可读的流:

可读流输出对象,而不是字符串。

我需要创建一个转换流,它可以过滤其中一些对象并将对象转换为 JSON,如下所示:

但是,由于某种原因,我的转换流不能接受转换方法的对象,只有字符串和缓冲区,我该怎么办?

我尝试添加这两个选项:

不幸的是,我的转换流仍然不能接受对象,只能接受字符串/缓冲区。

0 投票
1 回答
619 浏览

javascript - 使用 mock-cli 测试 readline 模块

我正在尝试使用 readline 为模块创建一个单元测试,它解释标准输入提供标准输出。

模块:

测试:

它没有通过测试,因为输出无效,并且它没有运行.on('line)事件。

0 投票
2 回答
36 浏览

ava - 测试中未调用可读流`_read`

我有以下简化的 ava 测试用例。当我通过 ava 运行它时,它_read()永远不会被调用(ONDATA 可以)。另一方面,当我将此测试主体(没有断言)作为节点脚本运行时,我总是_read()按预期被调用。可能我错过了一些关键功能,请指教。

0 投票
2 回答
1599 浏览

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

如果我做:

事情按预期工作。

但是,考虑到我已经在对象模式下设置了东西,这不应该在没有字符串化的情况下工作吗?

0 投票
1 回答
685 浏览

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() 的示例。谢谢!