Tag: stream

什么时候调用_read()的Node Readable Stream?

我创build自己的阅读stream。 但是我想知道什么时候调用_read(),如果我不添加on('data') listerner,_read()不会被调用,为什么呢? var data = [{"id":0,"name":"object 0","value":3}], Readable = require('stream').Readable, util = require('util'); var ReadStream = function() { Readable.call(this, {objectMode: true}); this.data = data; this.curIndex = 0; }; util.inherits(ReadStream, Readable); ReadStream.prototype._read = function() { if (this.curIndex === this.data.length) return this.push(null); var data = this.data[this.curIndex++]; //console.log('read: ' + JSON.stringify(data)); this.push(data); }; var stream = new […]

如何分块的对象stream?

我有一个对象stream( objectMode: true ),并希望将其块大小相等的数组,以便我可以pipe他们到另一个接受数组的函数。 我发现以下模块似乎可以达到缓冲区的效果,但不能用于对象: https://www.npmjs.com/package/block-stream https://www.npmjs.com/package/chunkit https://www.npmjs.com/package/chunking-streams https://www.npmjs.com/package/fixed-chunk-stream https://www.npmjs.com/package/chunk-stream 你知道一个模块可以做到这一点的对象stream或有一个明显简单的DIY解决scheme吗?

pipe道NodeJSstream到一个数组

我的用例是这样的:我正在阅读节点中的CSV文件,只有头。 我不想将读取stream的结果写入文件,而是一旦读取文件就将头部压入数组,所以我可以把这个数组放到后面去做。 或者,更好的是,在读取stream时,将其转换,然后将其发送到数组。 文件是一个人为的价值。 我被困在这一点,其中数据文件的当前输出是一个空的数组: const fs = require('fs'); const parse = require('csv-parse'); const file = "my file path"; let dataFile = []; rs = fs.createReadStream(file); parser = parse({columns: true}, function(err, data){ return getHeaders(data) }) function getHeaders(file){ return file.map(function(header){ return dataFile.push(Object.keys(header)) }) } 为了得到我需要的结果,我需要做什么? 我期待在数组中find标题作为最终结果。

Node.js转换文件stream并写入相同的文件结果为空文件

我正在尝试使用节点文件stream和自定义转换函数来修改一些文件。 这是转换function: const TransformStream = function() { Transform.call(this, {objectMode: true}); }; util.inherits(TransformStream, Transform); TransformStream.prototype._transform = function(chunk, encoding, callback) { let line = chunk.toString() if (!this.findLinesMode && lineStartRe.test(line)) { this.findLinesMode = true this.lines = [] } if (this.findLinesMode) { this.lines.push(line) } if (this.findLinesMode && lineEndRe.test(line)) { this.findLinesMode = false line = this.lines.join('').replace(re, (str, match) => match.trim()) […]

在Node.js中暂停可读stream

我正在使用csv-to-json ,一个整洁的库来处理CSV文件。 我有一个用例,我需要处理一个大的(> 200万行)CSV并将其插入到数据库中。 要做到这一点,而不会遇到内存问题,我打算处理CSV作为一个stream,暂停每10000行的stream,插入行中的数据库,然后恢复stream。 出于某种原因,我似乎无法pausestream。 以下面的代码为例: const rs = fs.createReadStream("./foo.csv"); rs.pause(); let count = 0; csv() .fromStream(rs) .on("json", (json) => { count++; console.log(count); }) .on("done", () => { cb(null, count); }) .on("error", (err) => { cb(err); }) countlogging200次(这是我有多less行我的CSV) – 我期待它没有logging任何东西,因为stream暂停之前,将它传递给fromStream()

Node.js:如何停止stream式传输数据

我使用请求npm模块创build一个请求。 但是,如果内容types不是json,我希望stream停止。 目前,它不会停止,并产生错误,因为解压缩读取一个无效的头.. 我们如何能够停止一个stream? var req = request(options) req .on('error', function (err) { console.log("err"); reject(err) }) .on('response', function(response) { if(response.headers['content-type'] != 'application/json') { console.log(response.headers['content-type']) req.destroy() // doesn't work this.destroy() // doesn't work } }) .on('end', function () { resolve() }) .pipe(gunzip) // ERROR!

节点命令行工具不在vagrant上编译

我在Windows 10上使用Vagrant。使用npm install (或npm install –no-bin-links ,因为我在Windows上的Vagrant)安装所有的依赖关系后,./ ./node_modules/.bin是空的。 我期望find一些命令行工具。 在我的情况下,这是svg2png-many是缺less的。 我也尝试用npm rebuild svg2png-many ,但是这并没有创build丢失的文件。 注:我没有得到任何错误运行npm install ,只是该文件不存在: ./svg2png.sh:第8行:./node_modules/.bin/svg2png-many:没有这样的文件或目录 这是在那个文件中 for t in "${themes[@]}" do echo "dist/img/${t}/" ./node_modules/.bin/svg2png-many -i "dist/img/${t}/" "dist/img/${t}/" done 接下来我应该尝试什么?

Sails.js将键和数据stream传给Angular

我有一个angular度前端,从sails后端(使用sails-mysql适配器)填充数据到UI网格。 此数据集很大,需要一段时间才能在页面显示包含任何数据之前加载。 我有从风帆和运行stream的基本知识: findAllStream: function (req, res) { Model.stream().pipe(res); } 到目前为止,这将每个单独的数据从模型传输到前端。 我正在使用angular-oboe来使用这个stream: vm.myData = []; var obj = {}; var count = 0; Oboe({ url: '/api/model/findAllStream', pattern: '*', start: function(stream) { // handle to the stream vm.stream = stream; vm.status = 'started'; }, done: function(parsedJSON) { vm.status = 'done'; } }).then(function() { // promise is […]

是否有一个节点模块的常见模式,需要asynchronous加载大文件才有用?

我不喜欢我见过的任何东西… 模 import lineReader from 'line-reader' let bigFile = './huge-file.csv' export default class DooDad { constructor() { this.dictionary = new Map() // Something like this seems like it'd be nice… // await this.load() } load() { return new Promise((resolve, reject) => { lineReader.eachLine(bigFile, (line, last) => { // this.dictionary = The contents of huge-file.csv }) […]

显示页面上的videostream块(node.js)

在Node.js中,我还是个新手,如果我听起来语无伦次,试图弄清楚一些事情,请原谅。 所以我已经阅读了一些关于stream的初学者笔记,现在我正在testing它。 我在我的项目文件(公共/图像/video/ Seinfeld.S09E07.720p.WebRip.ReEnc-DeeJayAhmed.mkv)中获得了这些Seinfeld情节(.mkv文件),我想在页面上显示。 现在,简单的select就是把它放在我的ejs文件中的video标签的“src”中。 但是,我想stream式传输video部分,以便它不必等待整个文件准备好显示该情节。 我以为我可以使用.createReadStream为此。 但是,我不知道如何将那些准备好的video数据块传输到我的网页中,以便在video播放器中显示它们。 index.js服务器端 var express = require('express'); var router = express.Router(); var fs = require('fs'); /* GET home page. */ router.get('/', function(req, res, next) { var myReadStream = fs.createReadStream(__dirname + '/../images/videos/Seinfeld.S09E07.720p.WebRip.ReEnc-DeeJayAhmed.mkv'); myReadStream.on('data', function (chunk) { // no idea what to do from here }) res.render('index', { title: 'Express' }); […]