Tag: stream

使用请求从url下载图像并保存到variables

有没有办法我可以从请求下载图像并将其保存到variables? request.head(url, function(err, res, body){ request(url).pipe(fs.createWriteStream(image_path)); }); 现在我将结果输送到写入stream。 但是,我想将其保存到一个variables,所以我可以在我的程序中使用它。 有没有办法做到这一点?

在NodeJS中使用stream和asynchronous读取和处理大小文件

我在逐行处理文件列表时遇到问题。 这是我正在使用的代码: var LineReader = require("line-by-line"); var async = require("async"); var files = [ "small.txt", "medium.txt", "large.txt" ]; var queue = async.queue(function(task, next){ console.log(task); next(); }, 10); async.eachSeries( files, function (file, callback) { var lineReader = new LineReader(file, { encoding: "utf8", skipEmptyLines: true }); lineReader.on("error", function (err) { callback(err); }); lineReader.on("line", function (line) { lineReader.pause(); […]

Node.js readStream结束大文件

我想在电子邮件通知中偶尔发送大型日志文件(> 100MB)的最后2KB。 现在,我正在尝试以下内容: var endLogBytes = fs.statSync(logFilePath).size; var endOfLogfile = fs.createReadStream(logFilePath, {start: endLogBytes-2000, end: endLogBytes – 1, autoClose: true, encoding: 'utf8'}); endOfLogfile.on('data', function(chunk) { sendEmailFunction(chunk); } 由于我刚刚重新启动,我的日志文件只有〜2MB,但随着他们变大,我想知道: 1)读取数据是否需要很长时间(节点是否遍历整个文件,直到它到达我想要的字节,或节点跳到我想要的字节?) 2)消耗多less内存? 3)内存空间何时释放? 如何释放内存空间?

控制node.jsstream中的stream

我写了一个gulp.js任务,连接/ uglify我的javascript到app.min.js,然后当它完成时,我想注入app.min.js到我的index.jade文件中的脚本标记。 所以我正在写下一个任务,不知道node.js控制stream如何工作…(我用Promise更好)。 gulp.task('js-prod', function () { return gulp.src(['js/main.js', 'js/**/*.js', 'dist/templates.js', '!js/**/*.spec.js']) .pipe(sourcemaps.init()) .pipe(concat('app.min.js')) .pipe(gulp.dest('dist')) .pipe(ngAnnotate()) .pipe(uglify({mangle: false})) .pipe(rename('app.min.js')) .pipe(sourcemaps.write()) .pipe(gulp.dest('dist')) .on('end', function () { var target = gulp.src('./index.jade'); var sources = gulp.src(['dist/app.min.js'], {read: false}); return target.pipe(inject(sources)).pipe(gulp.dest('./')); }); }); 它似乎工作,但它是正确的方式? 请问gulp.js采取正确的asynchronous提示? 从“结束”事件? 我承诺这将是 – > return startBuildPromise().then(function(){return (injectFileScript()});

nodejs中的jQuery.when()相当于什么?

我问jquery是什么时候在angular度 ,现在我想在节点做类似的事情。 我需要这样的东西: when(fs.readFile('file1'), fs.readFile('file2')) .done(function( a1, a2 ) { … // do stuff }); 我怎样才能做到这一点? 谢谢。

对这个stream可读的语法有点困惑

我读过stream手册,他们有这样的例子: var Readable = require('stream').Readable; var rs = new Readable; rs.push('beep '); rs.push('boop\n'); rs.push(null); rs.pipe(process.stdout); 它看起来正是我所需要的(将对象推入可读的stream并将其pipe道化为可写)。 所以这就是我想出来的 var Readable = require('stream').Readable; var rs = new Readable; app.get('/:foo', function(req, res) { oboe(fs.createReadStream("/file")) .node( "{}", function(data) { rs.push(data) }) rs.pipe(res); 我正在使用oboe来听取对象的fsStream并修改它们。 目前我推新find的对象到一个数组,然后在“完成”stream事件我会告诉res.json新创build的数组。 这个内存太重了,我想知道是否可以在find并修改对象的时候清空stream,把它推到可读的位置,当可读的stream获取数据时,它会将其stream出去res,但仍然保持一个对象。 不过,我收到这个错误 Error: not implemented at Readable._read 这是否意味着stream手册已过时?

如何通过pipe道控制node.js中httpstream的stream动

正如Node.js开发人员所知道的,节点可以将stream传输到另一个资源,如http响应。 解决scheme#1 http.createServer(function (req, res) { stream = fs.createReadStream(filename); stream.pipe(res); }); 解决scheme#2 还有另外一种方法来控制不需要pipe道的stream和缓冲区响应stream http.createServer(function (req, res) { stream = fs.createReadStream(filename); stream.on('data', function(data) { if (res.write(data) == false){ stream.pause(); } }); stream.on('end', function(data) { res.end(); }); res.on('drain', function(data) { stream.resume(); }); }); 解决scheme#2比#1好吗? 我认为这样更好,因为我们可以控制stream向http响应的stream。 当响应缓冲区满并且stream不能写入数据时,stream将暂停,并且当响应成为排放stream时将恢复 我的问题 当我使用解决scheme#2时,我的节点应用程序将停止工作站而不响应其他客户端。 这意味着它一次只能服务于一个客户! 我觉得这个问题会发生,因为节点正在等待发送res.end()到客户端并结束响应。 但我不明白如何解决这个问题。 如果这个解决scheme是绝对错误的,我只需要使用stream.pipe()请告诉我如何使用resume和pause函数来控制pipe道的stream动

删除当前正在发出的事件的事件侦听器

我有以下示例应用程序,用Node.js编写: 'use strict'; var events = require('events'), util = require('util'); var EventEmitter = events.EventEmitter; var Foo = function () {}; util.inherits(Foo, EventEmitter); var foo = new Foo(); foo.once('x', function () { foo.removeAllListeners(); console.log('Google!'); }); foo.once('x', function () { foo.removeAllListeners(); console.log('Yahoo!'); }); foo.emit('x'); 它打印: Google! Yahoo! 现在我的问题是:显然removeAllListeners不会影响当前绑定到事件的事件侦听器。 这是随机的,还是这是故意的? (我用0.10.32和0.11.13检查了这个) 我的问题的背景是:如果我绑定两个事件处理程序到一个stream的end事件,其中一个调用removeAllListeners ,Node.js是否保证两个将始终运行,或者这只是一个好运?

在Vagrant里面不能安装strongloop

我设法将其安装在我的主机OSX框但似乎无法得到它安装在vagrant: http://pastebin.com/RQkuHb82 有任何想法吗? 编者按,在这里粘贴错误信息: vagrant@vagrant-ubuntu-trusty-64:/vagrant$ npm install -g strongloop > heapdump@0.2.10 install /home/vagrant/.nvm/v0.10.33/lib/node_modules/strongloop/node_modules/strong-supervisor/node_modules/heapdump > node-gyp rebuild make: Entering directory `/home/vagrant/.nvm/v0.10.33/lib/node_modules/strongloop/node_modules/strong-supervisor/node_modules/heapdump/build' CXX(target) Release/obj.target/heapdump/src/heapdump.o make: g++: Command not found make: *** [Release/obj.target/heapdump/src/heapdump.o] Error 127 make: Leaving directory `/home/vagrant/.nvm/v0.10.33/lib/node_modules/strongloop/node_modules/strong-supervisor/node_modules/heapdump/build' gyp ERR! build error gyp ERR! stack Error: `make` failed with exit code: 2 gyp ERR! stack at ChildProcess.onExit […]

stream.Transform在完成输出之前接受新的input

我正在实现一个asynchronous操作的转换stream。 我叫Parser 。 var Transform = require('stream').transform; function Parser(options) { Transform.call(this, {objectMode: true}); } Parser.prototype._transform = function _transform(input, encoding, callback) { var this_ = this; doSomethingAsync(input, function(output) { this_.push(output); //possible location #1 for callback(); }); //possible location #2 for callback(); } 每个传入的块可能需要很长时间才能处理( doSomethingAsync需要networking请求)。 但是,每个块都完全独立于块处理。 而且,输出的确切顺序并不重要。 每个输出包含一个标识其input的描述符,而不是按顺序标识。 因此,我希望尽快再次调用_transform ,而不是等待给定的块完成处理。 所以,看代码,如果我把callback()放在possible location #1 ,那么在每个块被完全处理之前, _transform不会被调用。 但如果我把它放在possible location […]