Tag: stream

在node.js中一次读取一个文件的文件?

有没有办法从文件中一次读取nodejs中的一个符号,而不将整个文件存储在内存中? 我find了线的答案 我尝试了这样的事情,但没有帮助: stream = fs.createReadStream("walmart.dump", { encoding: 'utf8', fd: null, bufferSize: 1, }); stream.on('data', function(sym){ console.log(sym); });

直接在可写stream中pipe道可读stream

有什么区别: const stream = createReadStream(source).pipe(createWriteStream(destination)); stream.on("error", (error) => { stream.destroy(); stream.removeListener("close"); reject(error); }); stream.on("close", () => { // do something }); VS: const writable = createWriteStream(destination); const readable = createReadStream(source); readable.on("error", onError); writable.on("error", onError); function onError(error) { readable.destroy(); writable.destroy(); writable.removeListener("close", onClose); reject(error); } 为什么我们应该手动销毁stream如果发生错误? 节点不会自动做到这一点? 谢谢。

如何编写一个Node.js模块来处理传入的pipe道stream

我试图编写一个节点模块,接受一个传入的pipe道二进制(或base64编码)stream,但坦率地说,我甚至不知道从哪里开始。 我看不到有关处理传入stream的Node文档中的任何示例; 我只看到消耗他们的例子? 举例来说,我想能够做到这一点: var asset = new ProjectAsset('myFile', __dirname + '/image.jpg') var stream = fs.createReadStream(__dirname + '/image.jpg', { encoding: 'base64' }).pipe(asset) stream.on('finish', function() { done() }) 我已经看到了这样的ProjectAsset ,但我在下一步去哪里的损失: 'use strict' var stream = require('stream'), util = require('util') var ProjectAsset = function() { var self = this Object.defineProperty(self, 'binaryData', { configurable: true, writable: true }) […]

在mac-os-x Yosemite上调用“npm”时,Jenkins构build步骤失败

在我开始之前,我想说我已经检查了这些答案: Jenkins构build步骤在'npm install <whatever>'上失败 Jenkin的构build在npm安装上失败 现在,我正在处理这个问题已经有一段时间了,于是我尝试了一堆东西。 首先,我通过自制软件安装了node + npm。 一个简单的$ node -v和$ npm -v与v0.10.36节点和v2.3。*的npm版本相呼应,这也意味着我在path中拥有它们,并且在terminal中调用它们时工作。 只需添加node -v; npm -v node -v; npm -v到Jenkins的执行shell并没有这样做。 经过一些修补之后,我把$: which node在terminal中产生的$: which node复制到上面提到的脚本中,现在看起来像这样: /usr/local/bin/node ,显然这很有效。 Jenkins构build成功,并在控制台输出中自豪地显示了“node-v0.10.36”。 在为'npm'正好是/usr/local/bin/npm –version情况下做同样的事情/usr/local/bin/npm –version计算机上的神不再那么仁慈了。 一个很大的' env:node:这个文件或目录 '错误被抛出,整个构build失败。 失败的实际命令是$ /bin/sh -xe /var/folders/wr/g_dl81tn5_x0t_yz3jw602cr0000gn/T/hudson8770480548136671253.sh和“令人惊讶”,当我在terminal成功运行相同的命令。 我也卸载了自制软件节点&npm版本,然后通过软件包pipe理器安装。 相同的结果。 最终我也做到了这一点: https : //gist.github.com/DanHerbert/9520689 ,没有运气。 笔记: 我正在运行Jenkins 1.613,并尝试1.5 ** 我没有创build一个“jenkins”特定用户,而是我使用pipe理员。 这恰好与Jenkins运行的用户相同,因为who am i在可执行脚本中的命令产生pipe理员的用户名。 […]

在NodeJS中发送HTTP响应之前等待事件发生?

我正在寻找一个解决scheme,在发送HTTP响应之前等待事件发生。 用例 这个想法是我在我的一个路由中调用一个函数: zwave.connect("/dev/ttyACM5"); 这个函数立即返回。 但是有两个事件会告诉你连接设备是成功还是失败: zwave.on('driver ready', function(){…}); zwave.on('driver failed', function(){…}); 在我的路由中,我想知道在发送HTTP响应之前,设备是成功还是失败。 我的“解决scheme” 当事件发生时,我将事件保存在数据库中: zwave.on('driver ready', function(){ //In the database, save the fact the event happened, here it's event "CONNECTED" }); 在我的路线中,执行connect函数并等待事件出现在数据库中: router.get('/', function(request, response, next) { zwave.connect("/dev/ttyACM5"); waitForEvent("CONNECTED", 5, null, function(){ response.redirect(/connected); }); }); // The function use to wait for the event […]

如何使用请求使用变换stream?

基本上,我想在发送到客户端之前使用转换stream来改变http响应,但是我的代码在下面会引发一个错误:[Error:write after end]。 http://nodejs.org/api/stream.html#stream_writable_end_chunk_encoding_callback上的文档说: 在调用end()之后调用write()会引发一个错误。 在这种情况下,如何防止write()在end()之后被调用? var request = require('request'); var Transform = require('stream').Transform; var http = require('http'); var parser = new Transform(); parser._transform = function(data, encoding, done) { console.log(data); this.push(data); done(); }; parser.on('error', function(error) { console.log(error); }); http.createServer(function (req, resp) { var dest = 'http://stackoverflow.com/'; var x = request({url:dest, encoding:null}) x.pipe(parser).pipe(resp) }).listen(8000);

使用socket.io-stream将文件从服务器stream式传输到客户端

我已经成功地将文件从客户端上传到服务器,但现在我想实现相反的方式。 不幸的是,这个部分缺less官方模块页面上的文档。 我想要做到以下几点: 用文件名发送stream和“下载”事件到服务器 服务器应该创build一个readstream并将其传递给从客户端发出的stream 当客户端到达stream时,会出现一个下载popup窗口并询问文件的保存位置 我不想使用简单的文件超链接的原因是混淆:服务器上的文件被encryption和重命名,所以我必须解密并重命名为每个下载请求。 任何代码片段,让我开始呢?

gulp.js – 如何将多个stream返回到主stream?

我想启动一个gulp.srcstream,把它传递给一个创build一堆新stream的函数,然后把这些stream的结果传给gulp.dest 。 下面是我到目前为止,但显然不工作,因为我正在pipestream回到gulp.dest ,因为它期待一个文件,而不是一个stream。 所以我的问题是:如何正确地将n个stream返回到gulp的原始stream,以便它们可以继续适当的下降pipe道? //gulpfile.js var gulp = require('gulp'), bundle = require('./lib/bundle.js'); gulp.task('bundle', function() { return gulp.src('./bundle.config.js') .pipe(bundle()) .pipe(gulp.dest('./public')); }); – //bundle.config.js module.exports = { bundle: { main: { js: [ './content/js/foo.js', './content/js/baz.js' ], css: [ './content/**/*.css' ], resources: './content/**/*.{png,svg}' }, other: { js: './content/js/other.js', css: '', resources: '' } } }; – //bundle.js […]

我怎样才能提供inputstream到node.js /快递'发送,或获得其原始输出stream?

我在快速应用程序中提供了一个path,提供了一个云文件的内容下载。 我可以访问云文件的inputstream,我想直接将其input到响应的输出stream中。 但是,我正在使用Express,似乎不支持inputstream。 我希望我能做到这一点: res.send (cloudInputStream); 但是这不起作用。 快递“发送采取一个身体或缓冲区,但显然不是一个inputstream。 既然如此,我想要做的就是使用res.setHeader()设置头文件,然后访问原始输出stream,然后: cloudInputStream.pipe (responseOutputStream); 这可能吗? 另外,我可以把inputstream转换成一个缓冲区,并提供缓冲区来发送。 但是,这会将整个云文件的内容一次读入内存,这是我想避免的。 有什么想法吗?

Vagrant,为Node.js设置机器 – 厨师失败

我的Vagrantfile : Vagrant::Config.run do |config| config.vm.box = "lucid32" config.ssh.forward_agent = true config.vm.forward_port 3000, 3000 # allow for symlinks in the app folder config.vm.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/app", "1"] config.vm.customize ["modifyvm", :id, "–memory", 512, "–cpus", 1] config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "cookbooks" chef.add_recipe "apt" chef.add_recipe "build-essential" chef.add_recipe "nodejs-cookbook" chef.add_recipe "chef-hosts" chef.add_recipe "git" chef.json = { "nodejs" […]