Articles of node.js stream

节点:pipe道输出到标准输出泄漏内存

在MacOS 10.12.6的节点v8.9.1中: 下面的最小脚本创build一个Readablestream,产生无限的string“yes”。 然后通过pipe道stdout到stdout 。 据我所知,它是根据编写自定义Readablestream的指导原则编写的。 特别是,当push()返回false时,它停止产生数据。 然而,当我从terminal运行它时,这个进程的内存使用量将会无限膨胀,非常快,达到2GB。 这似乎表明stdoutstream中的某种无限累积。 任何人都可以诊断,并解释幕后发生了什么? var stream = require("stream"); var yesStream = new stream.Readable({ read: function(length) { while (yesStream.push("yes\n")) {} } }); yesStream.pipe(process.stdout);

可写入的stream完成了吗?

我试图在Node.js中实现一个可写的stream。 我正在阅读SubStack的优秀stream手册 。 我想知道是否有一种方法来查找里面的可写入stream当读取stream停止写入(当它调用push(null) )? 实现可写入stream是否可以订阅结束事件?

Node.js协调文件

我试图连接多个文件,并保存到一个新的文件,使用节点js createWriteStream和createReadStream 。 我有一个小错误,我想在其内容之前打印出文件名。 但是,文件名总是打印在输出文件的顶部。 请看我的结果输出,如果你有任何想法,请帮忙! 谢谢! test.js var async = require('async'); var fs = require('fs'); var path = require('path'); var SOURCE_FOLDER = '/tmp/test'; var SOURCE_FILE_PATTERN = /\.json$/ var REPORT_FILE = path.join(SOURCE_FOLDER, 'output.html'); var writeStream = fs.createWriteStream(REPORT_FILE, { flags: 'w', encoding: 'UTF-8' }); var appendReport = function appendReport(file, callback) { var readStream = fs.createReadStream(file, { […]

mongodbstream查询与through2.spy结束不被调用

我有一个来自mongo的stream式查询,我正在将它传输到一个通过“间谍”可写入stream。 它完全包含了5个文档的小集合的“结束”callback。 但是,如果收集了大量的344个文件,只有前15个文件才能通过,那么这个文件永远挂起来,而“结束”事件永远不会发生。 这是一个MCVE: var spy = require("through2-spy").obj; var MongoClient = require("mongodb").MongoClient; function getStream() { var stream = spy(function() { console.log("@bug counting", stream.total++); }); stream.total = 0; return stream; } function onEnd() { console.log("ended"); } MongoClient.connect(process.argv[2], function(error, db) { if (error) { console.error(error); return; } var stream = db.collection(process.argv[3]).find().stream(); stream // behavior is the same […]

node.js – Busboy如何工作?

我对Busboy模块有些困惑。 我不明白在哪里需要文件数据stream,因为它只接受请求标题作为参数?! 看看文档中的示例: var busboy = new Busboy({ headers: req.headers }); busboy.on('file', function (fieldname, file, filename, encoding, mimetype) { //… // btw file is ReadableStream! });

NODEJS:可写入stream上的Uncork()方法并不真正刷新数据

我正在编写相当简单的应用程序来转换数据 – 读取一个文件并写入另一个文件。 文件相对较大 – 2 GB。 不过,我发现在软木塞的循环中刷新文件系统并没有发生,只发生在end()上,所以end()基本上挂起了系统,直到完全刷新为止。 我简化了这个例子,所以它只是写了一个很多次的stream。 var PREFIX = 'E:\\TEST\\'; var line = 'AA 11 999999999 20160101 123456 20160101 AAA 00 00 00 0 0 0 2 2 0 0 20160101 0 00'; var fileSystem = require('fs'); function writeStrings() { var stringsCount = 0; var stream = fileSystem.createWriteStream(PREFIX +'output.txt'); stream.once('drain', function () […]

pipe道相同的stream两次创build一个无限循环

我正在与Node.jsstream练习,我有以下代码的问题: 'use strict' let stream = require('stream'); let logger = new stream.Transform({ transform: function (chunk, encoding, next) { console.log(`Chunk: ${chunk}`); this.push(chunk); next(); } }) let liner = new stream.Transform({ transform: function (chunk, encoding, next) { chunk.toString().split('\r\n').forEach(e=>this.push(e)); next(); } }) process.stdin.pipe(logger).pipe(liner).pipe(logger); 我希望这两个调用logging器是不同的logging器stream的实例,但他们似乎是相同的,他们进入一个无限循环,所以我应该怎么称呼他们,所以这段代码按预期工作。 非常感谢你。

在“结束”事件被触发之前写入stream

我正在使用几个child_process与一个Node.js父进程,我将所有从subprocessstderrpipe道到一个文件。 像这样: const strmPath = path.resolve(projRoot + '/suman/stdio-logs/runner-stderr.log'); const strm = fs.createWriteStream(strmPath); //before I call pipe I write some stuff to the log file strm.write('\n\n>>> Suman start >>>\n'); strm.write('Beginning of run at ' + Date.now() + ' = [' + new Date() + ']' + '\n'); strm.write('Command = ' + JSON.stringify(process.argv) + '\n'); // when […]

在Node.js中将PNG从GET请求转换为可读stream

我正在尝试制作一个可以发送猫照片的Facebook聊天机器人。 我使用RESTful API来获取猫图片。 他们是原始PNG返回。 接下来最后一步是将该图像转换为可读stream,以便Facebook Chat API可以将其作为附件发送。 我使用request.js来抓取图像。 请求的文档只提到保存图像作为文件和读取文件到stream.Readable 。 我不知道是否有办法绕过这个临时文件,并将图像直接传输到Facebook Chat API。 这是我的代码到目前为止: var request = require("request"); var stream = require("stream"); module.exports = function getCatPicture(api, threadID, body) { var options = { url: 'http://thecatapi.com/api/images/get?type=png', encoding: 'base64' } var picStream = new stream.Readable; request.get(options, function (error, response, body) { picStream.push(body, 'base64'); var catPic = { […]

从node.js调用Rscript

我一直在试图从我的node.js服务器执行Rscript。 试图在网上一个例子,但我不断收到一个null返回的对象或有时过程一直运行到永远。 我已经提到了下面的代码片段。 谢谢。 example.js :: var R = require("r-script"); var out = R("scripts/testScript.R") .data("hello world", 20) .callSync(function(err,resp){ console.log(out); }); testScript.R文件::: needs(magrittr) set.seed(512) do.call(rep, input) %>% strsplit(NULL) %>% sapply(sample) %>% apply(2, paste, collapse = "")