Articles of node.js stream

我怎样才能旋转我写在node.js文件?

我正在将logging写入node.js中的一个文件中,并且我需要每隔很多行或持续时间使用一个新文件来旋转文件,但是在这个过程中我不能丢失任何行。 如果我尝试使用fs.createWriteStream来创build一个新的stream,我最终会通过覆盖旧的stream来丢失行。 任何意见将不胜感激。

为什么在完成之前,“完成”事件在Node.js转换stream上触发?

我期待只有当传递给_flush的callback完成后才能触发callback,但是在_flush完成之前触发callback。 为什么? var stream = require('stream').Transform(); // Nothing interesting here stream._transform = function (chunk, enc, next) { next(); }; // _flush makes an async call. stream._flush = function (callback) { console.log("Expecting 1st: Entering _flush "); return process.nextTick(function () { console.log("Expecting 2nd: Done with _flush"); callback(); }); }; stream.on('finish',function () { console.log("Expecting 3rd: Entering finish callback– […]

节点fs.readstream()输出<缓冲区3c 3f 78 6d 6c …>而不是可读数据

我在Node Js中读取一个大的XML文件(〜1.5gb)。 我正在尝试使用大量数据进行stream式处理,但是我发现很难理解文档。 我目前的简单代码是: var fs = require('fs'); var stream = fs.createReadStream('xml/bigxmlfile.xml'); stream.on('data', function(chunk){ console.log(chunk) }); 控制台给出了一堆bufferhex(我认为)代码是这样的: <Buffer 65 61 6e 2d 63 75 74 20 67 72 69 64 20 6c 69 6e 65 73 20 74 68 65 20 73 70 72 65 61 64 20 63 6f 6c 6c 61 72 20 […]

计算节点js中的数据字节

我有一个大小为500 MB的vhd(磁盘),其中只写了10 MB的数据,接着是空的块,最后是一个10 MB的数据块。 所以,目前的总数据只有500MB的20MB。 我正在尝试在node.js中查找实用程序,以找出数据字节的数量,但未成功。 有一个函数fs.fstatSync(file).size ,它给出了总大小。 是否有任何实用程序/函数来计算写入的数据?

如何重新设置标准input后,我已经把它的标准输出?

你好,首先这个问题! 无论如何,我正在写一个小实验来帮助更好地把握stream和更复杂的结合stream和承诺的组合。 但是,我遇到了一个我目前无法解决的问题。 如果你运行我的下面的脚本,然后inputinput,然后按ctrl-d结束input:节点将尝试从标准input读取所需的,但因为标准input结束,立即closures。 那么有没有更好的方法来写这个? 或者有没有办法重置标准inputstream再次input? 还是有更好的方法来停止要求input等待结束事件来解决我的承诺? 同样值得注意的是:在Node 5.1.0上运行,使用ES2015(通过Babel 6) import { Transform, Writable } from 'stream'; import util from 'util'; /** * Generic Transform * A test class to expiriment with creating a series of transforms * * @class * @extends {stream.Transform} */ class GenericTransform extends Transform { constructor (transformCallback, options={}) { super(Object.assign({}, options, […]

没有触发nodejs stdin可读的事件

readable事件不会在process.stdin被触发 test.js var self = process.stdin, data ; self.on('readable', function() { var chunk = this.read(); if (chunk === null) { handleArguments(); } else { data += chunk; } }); self.on('end', function() { console.log("end event",data ) }); 然后,当我做node test.js并开始在控制台中键入, readable事件根本不会被触发。 请告诉我如何将readable侦听器附加到process.stdinstream。

使用Oboe.js,MongoDB和Express.js进行JSONstream式传输

我正在用Oboe.js,MongoDB和Express.js通过HTTP实验JSONstream。 重点是在MongoDB (Node.js的mongodb本地驱动器)中执行查询,将它(一个JavaScript数组)传递给Express.js并使用Oboe.js在浏览器中parsing它。 在MongoDB查询服务器端和客户端的JSONparsing中,我做的基准testing比较了streaming和blocking 。 这是两个基准的源代码。 第first number是1000 queries 10 million documents collection中100 items (分页)的1000 queries的毫秒second number ,括号之间的second number表示MongoDB结果数组中第一个项目之前的毫秒数parsing。 stream媒体基准服务器端: // Oboe.js – 20238 (16.887) // Native – 16703 (16.69) collection .find() .skip(+req.query.offset) .limit(+req.query.limit) .stream() .pipe(JSONStream.stringify()) .pipe(res); 阻塞基准服务器端: // Oboe.js – 17418 (14.267) // Native – 13706 (13.698) collection .find() .skip(+req.query.offset) .limit(+req.query.limit) .toArray(function (e, docs) […]

node.js createWriteStream不会在Heroku上创build新文件

我有我的本地主机上运行node.js 0.12.0正常工作的以下代码。 代码创build一个新文件,并从可读的数据中复制数据,但不会在Heroku上创build新文件。 var output = fs.createWriteStream('public/images/test/testfile.png'); readable.pipe(output); 我认为这与权限有关,但每当我使用heroku run bash更改文件夹的权限,然后chmod -R 777 images/ Heroku将其重置为其原始权限,即drwx—— 。 所以可能是这个问题是别的? 请注意,它失败了,没有例外,没有任何logging。

如何在Node.js中设置一个variables为morgan的结果(不logging在控制台上)

我不明白节点中的stream。 我尝试将应用程序的请求和响应信息保存到MongoDB中。 首先,我想为摩根的结果设置一个variables: var apiInfo = morgan('dev') app.use(console.log('test______',apiInfo)) 但是,它不起作用。 我知道这在摩根官方网站: var express = require('express') var fs = require('fs') var morgan = require('morgan') var path = require('path') var app = express() // create a write stream (in append mode) var accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), {flags: 'a'}) // setup the logger app.use(morgan('combined', {stream: accessLogStream})) app.get('/', function (req, […]

Nodejsstream暂停(非pipe理)和恢复(pipe道)中间pipe道

我需要“暂停”一个可读的stream达几秒钟,然后重新开始。 可读stream正在被传送到一个转换stream,所以我不能使用常规的pause和resume方法,我不得不使用unpipe和pipe 。 在转换stream中,我能够检测到pipe事件,然后在可读stream上进行unpipe ,然后在几秒钟后,再次pipe恢复它(我希望)。 这里是代码: main.ts import {Transform, Readable} from 'stream'; const alphaTransform = new class extends Transform { constructor() { super({ objectMode: true, transform: (chunk: string | Buffer, encoding: string, callback: Function) => { let transformed: IterableIterator<string>; if (Buffer.isBuffer(chunk)) { transformed = function* () { for (const val of chunk) { yield String.fromCharCode(val); […]