问题标签 [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.

0 投票
1 回答
1297 浏览

node.js - 如何将图像写入具有缓冲区的服务器?

在 Expressjs 中,我上传了一张图片。它以 7 位 Buffer 编码的形式出现:

如何将其作为图像保存到文件系统?某些内容已保存,但不是图像:

Windows 照片查看器无法打开此图片,因为文件似乎已损坏、损坏或太大。

这些不起作用:

0 投票
1 回答
519 浏览

node.js - Nodejs http.ClientRequest 套接字不适用于“数据”事件(暂停/流动模式?)

我正在研究来自 Node.js http 模块文档https://nodejs.org/api/http.html#http_event_connect_1的代码。原始代码在屏幕上打印 http 响应数据。在我将“数据”事件回调从位置 (A) 移动到 (B) 后,它只打印连接标头HTTP/1.1 200 Connection Established ...但不打印 http 正文。程序就停在那里。是套接字没有发出“数据”事件还是什么原因?似乎套接字也没有发出“结束”事件。

我通过添加代码 (C) 解决了这个问题,强制套接字以流动模式工作。但我不明白为什么没有代码(C)它就不能工作。

客户端部分代码如下:

完整的原始代码在这里:https ://nodejs.org/api/http.html#http_event_connect_1

0 投票
0 回答
482 浏览

javascript - 将标准输入通过管道传输到标准输出后,如何重置标准输入?

嗨,第一个问题!无论如何,我正在写一个小实验来帮助更好地掌握流和结合流和承诺的更复杂的组合。

但是,我遇到了一个我目前无法解决的问题。如果您运行我的以下脚本然后输入输入,然后按 ctrl-d 结束输入:节点将尝试根据需要从标准输入读取,但由于标准输入已结束而立即关闭。那么有没有更好的方法来写这个?或者有没有办法重置标准输入流以再次输入?或者有没有更好的方法来停止要求输入以等待结束事件来解决我的承诺?

另请注意:在节点 5.1.0 上运行,使用 ES2015(通过 Babel 6)

0 投票
1 回答
1283 浏览

javascript - 乙烯基 fs(gulp 文件流)在触发回调或承诺之前未完成 .dest 写入

令人沮丧的是,在启动代码以将目标文件夹的副本上传到 S3 存储桶之前,试图让一个乙烯基-fs (gulpfs) 流完成写入所有 .dest 文件。该复制操作一直缺少流尚未写入的目录。

问题是 vinly-fs 如何处理回调/承诺(是吗?)。

我已经整理了一些测试代码来进行实验,但是当该代码运行时,即使我在 .dest 命令之后强制流等待 5 秒,然后再触发 Promise 解析,也会立即解析 Promise(在写入开始之后?)。我的解决功能当前触发,然后 5 秒后我回到我的提示。完全卡在了这一点上。我不想没有乙烯基-fs,但无论我尝试什么,它似乎都不能很好地播放,我需要它作为一个序列工作(在上传之前写出所有文件)。

下面是我的测试代码。我进行了设置,以便您可以轻松地将代码转储到文件中,设置一些源目录并自己尝试。我查看了 gulpjs 问题和 stackoverflow 以及其他一些问题,但我没有看到明确的答案/解决方案。

测试.js

顺便说一句,您可能想知道为什么我不使用 gulp.task 并返回承诺并将我的上传作为单独的 gulp 任务触发。我目前将我的 gulp.tasks 最小化为 cli 启动的任务。最终就像运行此代码一样,只需使用 wow “node test” 代替并删除全局 gulp 依赖项和 gulpfile.js 。Vinyl-fs 是一个很棒的模块!但我决定最好不要购买 Gulp/Grunt/Brunch/Jake 的东西。

0 投票
2 回答
1759 浏览

node.js - NODEJS:可写流上的 Uncork() 方法并没有真正刷新数据

我正在编写非常简单的应用程序来转换数据 - 读取一个文件并写入另一个文件。文件相对较大 - 2 GB。然而,我发现刷新到文件系统并没有发生,在软木-松开循环中,它只发生在 end() 上,所以 end() 基本上会挂起系统,直到它完全刷新。我简化了示例,因此它只是多次向流中写入一行。

进入节点 _stream_writable.js,我发现它只在这种情况下刷新缓冲区:

而且,正如您从示例中看到的那样,在第一次 uncork() 之后写入标志不会设置,这会阻止 uncork 刷新。另外,我根本没有看到排水事件发生。玩 highWaterMark 没有帮助(实际上似乎对任何事情都没有影响)。手动将写入设置为 false(+ 其他一些标志)确实有帮助,但这肯定是错误的。我误解了这个概念吗?

0 投票
2 回答
1092 浏览

javascript - 为什么这个 Node.js 代码中没有触发“完成”事件?

这里是 Node 的新手。我正在尝试.tar.xz通过以下代码下载文件并将其解压缩到目录中:

出于某种原因,'finish'tar 流上的事件似乎没有被触发,即使它完成了对存档内容的提取。tar是一个由 npm 自己维护的库,所以我假设我在这里犯了某种错误。无论如何,为什么会发生这种情况,我该怎么做才能解决它?

0 投票
1 回答
38 浏览

javascript - 使 Node.js 流信息不可枚举

我试图在执行以下操作时从继承自console.log()的类中省略这种数据:

... ETC。

通常我会尝试类似的东西:

但是因为PassThrough它实际上不是对象的属性,所以它不起作用。如何隐藏流信息console.log()

(免责声明:我确实意识到这是设计使然,隐藏它可能是个坏主意;)

0 投票
1 回答
623 浏览

node.js - 管道两次相同的流创建一个无限循环

我正在使用 Node.js 流进行练习,但遇到以下代码问题:

我希望对 logger 的两个调用是 logger 流的不同实例,但它们似乎是相同的,并且它们进入了一个无限循环,所以我应该如何调用它们才能使这段代码按预期工作。

非常感谢。

0 投票
0 回答
80 浏览

node.js - 管道可读到可写导致崩溃

我有一个 Readable 生成一个无限序列:

正如预期的那样,它可以永远运行:

而且我还有一个 Writable 可以吃掉任何给它的东西:

我用一个非常大的文件对其进行了测试,它也按预期工作:

但是,当我通过管道readable传输到writable

该程序运行了一段时间,然后崩溃并出现核心转储:

为什么?我做错什么了吗?

更新

ShanShan评论说console.log会减慢可写的速度,并且无法跟随可读的所有输入,从而导致内存不足崩溃。为了验证这个理论,我做了一个实验:

代码几乎和以前一样,除了:

  1. 我将 highWaterMark(缓冲区大小限制)设置为非常低的值;
  2. 我在可读文件中添加了一个 console.log。

输出如下:

程序仍然崩溃。显然 and 的执行readable几乎writable是严格交错的,而且缓冲区大小总是很小,所以我认为 ShanShan 的理论是不正确的。

0 投票
2 回答
2287 浏览

node.js - Node.js从shell管道读取后如何使用stdin流读取用户输入

从 shell 管道接收数据后,我需要通过提示询问用户。但应用程序在从管道读取数据后立即关闭。热到让它等待用户输入?

当我运行这个脚本

它打印

并立即退出,从不等待提示。

我在 Windows 上,节点 v4.2.1