Tag: node.js stream

process.stdout.write / process.stderr.write monkey-patch在subprocess中工作,但不是父进程

所以我在process.stdout.write / process.stderr.write上有这个简单的猴子补丁 const strm = fs.createWriteStream(logfile); const stdoutWrite = process.stdout.write; process.stdout.write = function () { strm.write.apply(strm,arguments); stdoutWrite.apply(process.stdout, arguments); }; (对于process.stderr,它是相同的,正在写入同一个stream)。 问题: 当我用node x.js运行这个过程 该stream在closures之前并不完成全部写入,甚至不closures。 但是,如果我跑 $ node y.js # this runs x.js in child process 现在在子节点中运行的stream将完成写入,并且日志文件现在已满。 为什么会这样? 在使用fs.appendFileSync ,有没有一种方法可以确保在stream程closures之前数据stream将会stream失? 编辑: 我想我知道为什么会发生这种情况 – 我正在调用process.exit() ,它会提前closures进程,并可能在stream完成之前调用。 有没有一种方法来听stream何时写完? 如果调用process.exit()时,在stream上调用finish(),那似乎是一个人为的“完成”。 我试图等待“stream失”事件,但似乎从来没有开火。

res.write不会返回预期的值

这是代码: var http = require('http') var options = { hostname: 'localhost', method: 'POST', port: 8000, path: '/' } var s = 3; http.request(options, (res)=>{ }).end(s+'') http.createServer((req, res)=>{ res.writeHead(200, {'Content-type': 'text/plain'}) var a = ""; req.on('data', (data)=>{ a+= data }) req.on('end', ()=>{ res.write(a) res.end() }) }).listen(8000) 为什么当预期返回值为3时,服务器可能会向客户端返回无效信息?

Node.Js通过2修改stream

我正在尝试使用通过2的Node.jsstream。 我有一个stream,这是一个index.html文件,我试图修改index.html内容行,每行添加一个——- 。 我有: indexHTML .pipe(through2.obj(function(obj, enc, next) { blah = obj.contents.toString().split('\n'); blah.forEach(function(element) { this.push("——-"); this.push(element): }); next(); })).pipe(process.stdout); 我现在遇到的问题this.push()在blah.forEach()数组方法中不可用。 有关如何实现修改index.htmlstream的任何build议?

在node.js中,Buffer.from()方法正在抛出“ascii不是函数”的错误

在Node.js中,Buffer类是全局的。 当我试图在Visual Studio代码中执行下面的代码行时,node.js抛出exception。 我的代码 var buffer = Buffer.from('Hello','ascii'); 例外 TypeError: ascii is not a function at Function.from (native) at Function.from (native)

我怎样才能旋转我写在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。