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

arrays - json的node.js流数组以响应

我有一个 REST 方法,它应该返回一个 JSON 数组,其中包含从 mongodb 读取的某些元素(使用 mongoose)。

它应该非常简单(在实际情况下 find 方法有参数,但这不是问题):

这种方法的问题是我没有得到有效的 JSON,因为结果是这样的:

我期待这个:

我一直无法找到解决方案,但我很确定会有一个简单的解决方案。

我试过的:

没有什么让我感到自豪的,但它就在这里。

  1. 在流式写入'['响应之前。
  2. 我提供了另一种调用 JSON.stringify 并','在末尾添加 a 的方法,而不是 JSON.stringify
  3. 在流的“结束”事件中,我写入']'响应。

仍然没有使用这个“解决方案”,因为我在结尾有一个逗号,如下所示:

正如我所说,我很确定应该有一个干净的解决方案,因为它应该很常见。

这个方法会有很多并发调用,所以我不想把所有的东西都读到内存中,然后把所有的东西都写到响应中。每次调用都不会返回很多记录,但它们加在一起可能会很大。消费者是一个带有spring的java应用程序,使用jackson解析JSON。

请让我知道该怎么做。

回答

通过按照接受的答案中的建议创建一个转换流,我让它工作了。

我的流看起来像这样:

以及使用它的代码:

谢谢。

0 投票
3 回答
1757 浏览

node.js - 在 node.js 中将端口号作为参数传递

我目前正在做一个项目,以在当前服务器超载时自动动态生成新服务器。我正在使用node.js来创建服务器。我还使用变量计算了请求数。这个程序对吗?还是我应该更改我的代码?

我使用了一个函数来生成一个带有参数服务器名称和端口号的服务器,但我在指定的端口号中遇到错误。错误是process.nextTick error。错误出在函数调用中的端口号上。

我需要一个正确的过程来将端口号作为参数传递给函数。

代码

错误

0 投票
1 回答
77 浏览

javascript - 从基于文件的流中解析标头会产生意想不到的结果

我正在编写一个小型解析器来使用节点流(实际上是 io.js,但我认为这并不重要)来处理一些日志文件。

我正在按照文档中的示例进行 unshift来解析标题。我可以成功拆分缓冲区并获取标题,但是一旦我调用stream.unshift它,它似乎就会连接标题字符串和剩余的字符串。

在为这个问题设置一些示例代码时,我发现当我查看基于文件的流时会发生这种行为。每当我使用基于字符串的流时,即使文件具有与字符串完全相同的文本,问题也不会发生。

这是我的文本编辑器中打开了空白字符的文件的样子,(用于比较): 示例日志文件的文本编辑器输出

我需要一些帮助来理解为什么会这样。

0 投票
2 回答
203 浏览

node.js - 未调用 through2.spy 端的 mongodb 流查询

我有一个来自 mongo 的流式查询,我将它传送到一个 through2“间谍”可写流。它完全包括带有 5 个文档的小集合的“结束”回调。但是,对于 344 个文档的更大集合,只有前 15 个通过,然后它永远挂起,并且“结束”事件永远不会触发。这是一个 MCVE:

0 投票
1 回答
1741 浏览

node.js - 从管道 HTTP 流中删除标头

举一个我想要实现的简短示例,假设我们有一个 HTTP 服务器已经在为给定的请求提供服务:

现在,考虑接收请求的第二个 HTTP 服务器的存在,为了服务它,它需要调用第一个服务器。(例如,当我们有一个需要调用给定 RESTful 端点的 Web 应用程序时的经典场景)。

现在,我喜欢将原始请求与第二台服务器完成的内部请求的响应进行管道传输的想法,这非常方便,这正是我所需要的。但在我将响应发送回客户端之前,我希望有机会从第一台服务器发送的响应中删除任何逐跳标头。我肯定想要整个有效负载,并且我想要它的响应中的一些标头,但肯定不是全部。

例如,我想避免发送像 Proxy-Authenticate 或 Connection 这样的标头,或者任何被认为是逐跳标头的标头。另外,如果我希望我的第二台服务器这样操作,我想考虑不发回保持活动状态的可能性,等等。

我知道如何在响应传递之前添加标头,但是一旦通过管道传输,我不知道如何从管道传输的响应中删除标头。

不要误会我的意思,我知道我可以通过订阅事件然后自己构建响应来做到这一点,但我想知道如果我正在管道响应,这是否仍然可行。

有没有人知道如何实现这个技巧?

0 投票
1 回答
40 浏览

node.js - 当两个(!) 事件触发时执行 .on('end')

我有一个节点应用程序,可以将两个文件作为流读取。我event.on('end')过去常常处理结果。问题是我真的不知道如何等待两个事件触发“结束”。

我现在拥有的是:

对于小文件,这是可行的,但如果其中一个文件非常大,则应用程序会中止。

0 投票
1 回答
193 浏览

node.js - NodeJS FS 写入读取不一致的数据而不溢出(解决为 Buffer.toString)

我正在使用该fs.createWriteStream(path[, options])函数创建一个写入流,该流拆分为文本行,每行以\n.

但是,当该过程结束时,如果我去检查流 leater 它似乎已损坏,显示一些(很少)损坏的行(如 0.05% 的行看起来像缓冲区溢出错误一样被部分切割)。

无论如何,如果我使用创建流时的选项将内部流缓冲区从 16k 增加到 4M highWaterMark,错误率似乎会改变但不会消失!)

0 投票
3 回答
7942 浏览

node.js - Node.js 中的本地模块和全局模块有什么区别?何时使用本地和全局模块?

我们可以使用require函数访问本地模块,但不能通过它访问全局模块。我在某处读到要使用全局模块,我们需要将其设为本地然后通过 require 函数导入它。所以如果我们不能直接访问全局模块,那么使用它有什么需要。

0 投票
1 回答
140 浏览

javascript - mongodb 和 node.js 驱动程序未连接聊天休息 api

在使用 node.js/mongodb 核心模块时尝试连接到 mongodb 时出现错误。

目前使用 node.js v0.10.25 和 mongodb v2.6.1

我的错误之一是连接到 mongodb

运行 nodemon 时我也得到了这个

这是我的聊天休息 api 代码

希望可以有人帮帮我 :)

0 投票
1 回答
354 浏览

node.js - 节点 TLS 客户端中的神秘 TCP 错误

我有几个节点 tcp 客户端和一个连接到外部服务器的 tls 客户端:

或者

这两个服务器都会间歇性地发出未处理的错误:

我认为 on('error 处理程序应该处理这些错误,但显然不是。我错过了什么?

我想我可以使用域来包装连接调用,但我宁愿在这样做之前了解正在发生的事情。