Tag: stream

同时使用fs.createReadStream()和EISDIR同时打开和错误

在实现简单的静态服务中间件时,我偶然发现了下面的代码: fs = require('fs'); util = require('util'); stream = fs.createReadStream('/'); stream.on('open', function(fd) { console.log('opened! ' + util.inspect(fd)); }); stream.on('error', function(err) { console.log('error! ' + util.inspect(err)); }); 当参数是目录时, open和error事件都会被发出! $ node test.js opened! 11 error! { [Error: EISDIR, read] errno: 28, code: 'EISDIR' } 我以为我有open或error ,从来没有在同一时间。 什么是优雅的方式来区分好的open和坏的open而不诉诸明确testingfd与stat是目录? 还有其他类似的情况吗?

关于可用于mongoose查询的可滚动游标的错误

用户模型contian SubscriptionSchema和AccessToken Schema,我也用{capped : 234556}定义了这两个插件模式。 var User = new Schema({ email : String , firstName : String , password : String , isAdmin : Boolean , lastSeen : Date , subscriptions : [ SubscriptionSchema ] , accessTokens : [ AccessToken ] }, { toObject : { virtuals : true } , toJSON : { virtuals […]

使用Function.bind时节点转换stream怪癖

进入这个转换stream的行为,我不能解释。 首先设置: var pass = new require('stream').PassThrough var numbers = ['one:', 'two:', 'three:', 'four:', 'five:', 'six:', 'seven:', 'eight:', 'nine:', 'ten:'] pass.pipe(process.stdout) 好的,现在当我使用forEach写入stream时,我得到以下预期的行为: numbers.forEach(function(val) { pass.write(val) }) # one:two:three:four:five:six:seven:eight:nine:ten: 但! 如果我以这样稍微不同的方式写入stream,我会得到以下意外的行为: numbers.forEach(pass.write.bind(pass)) # one:tthfoufivesix:seven:eight:nine:ten: 所以我的问题是,为什么不同的产出? 我在这里错过了什么吗? 我正在运行v0.10.30

Node.js Readline接口“暂停”事件不会暂停inputstream

我期望下面的代码创build一个带有可读stream的文件,其中包含大约1000个URL的文件,从inputstream开始stream式处理(logging一行到控制台),然后暂停: var readline = require('readline'); var fs = require('fs'); var rlinterface = readline.createInterface({ input: fs.createReadStream('urls.txt'), output: null, terminal: false }); rlinterface.on('pause', function() { console.log('Readline paused.'); }); rlinterface.on('line', function(line){ console.log(line); rlinterface.pause(); }); pause事件的监听者通知我应该暂停stream,但inputstream中的文件中的所有行都logging到控制台,这表明stream不会暂停。 即使stream在第一行之后没有立即暂停(可能需要在缓冲区中捕获一些额外的行),我并不希望来自inputstream的文件中的所有行在“暂停'。 发生什么了?

有没有什么方法可以在NodeJS中重复使用一系列pipe道转换?

例如,如果我有 readableStream.pipe(ws1).pipe(ws2).pipe(ws3) 我怎样才能将这个转换链封装在一个函数中,然后在另一个转换链中重用呢? 我想要这样做: var transformationChain1 = readableStream.pipe(ws1).pipe(ws2).pipe(ws3) readableStream2.pipe(transformationChain1).pipe(endWs)

NodeJS嵌套事件侦听器

我不明白,为什么通过嵌套事件监听器传递所有值的事件发射器的参数? 是因为它必须通过上层的“join”监听器吗? variables信息是否存储在某个地方? var events = require('events'); var net = require('net'); var channel = new events.EventEmitter(); var i = 0; var subscriptions; // IF we have two connections channel.on('join', function(subs) { // Upper Listener console.log(subs); // -> output 0 when first client joined and 1 for second channel.on('broadcast', function(subs2) { // lower listener console.log(subs); // […]

Vagrant,nodejs和iptable端口转发

当我尝试将nodejs用作stream浪者(在OS X上)的Web服务器时,我遇到了一些小问题。 我的configuration文件链接如下,我只有nodejs和mongodb安装。 盒IP是10.10.56.101 (我需要另一个IP比192.168.56.101在我的学校工作)。 我尝试使用下面链接的小脚本访问nodejs服务器。 该脚本只能在端口51160上收听,并且回答OK。 首先,我没有得到任何答案,search后,我发现我需要做一个端口转发和一个iptable它的工作(命令链接下面,端口51160而不是8000 )。 我重新安装了相同configuration的stream浪机,我无法让机器继续工作。 我可以从stream浪机内curl localhost:51160 ,但是我无法从虚拟机之外获取任何内容。 档案: config.yaml: https ://gist.github.com/nobe4/0bb16fdb23279d416656 server.js: https : //gist.github.com/nobe4/639d63ef612f247d9309 iptable命令: https : //gist.github.com/kentbrew/776580#file-node-on-ec2-port-80-txt-L39

有一个简单的方法来打开从节点中的Mongo可读stream吗?

使用MySQL 很容易从数据库中打开一个可读的stream。 我们所需要做的是: function getTableStream() { connection.query('SELECT * FROM someTable WHERE field = value').stream(); } 之后,我们可以做这样的事情: getTableStream.on('data', function(data) { console.log(data); }); 这是快速的。 事实上,我用了85千行这样的东西,并且能够在不到一分钟的时间内在控制台上列出所有的数据。 我想知道:是否有可能对MongoDB做同样的事情? 我们可以从mongo打开可读stream,并通过stream式传输从那里获取数据吗? 如果可能的话,Mongo怎么样?

让节点模块返回一个“数据stream”的技术?

我希望我正确地问这个问题,但本质上,是否有一种方法在NodeJS有一个CommonJS模块返回一个数据stream,而不是一个(长)计算后的最终数据块? 假设有不止一种方法,这些技术是什么? 例如,假设我有一个用CommonJS模块编写的findPrimes函数: find-primes.js /** * @module findPrimes * @param {int} n – Find all primes less than this number * @return {array} */ module.exports = function(n) { if (n < 2) { return []; } else if (n === 2) { return [2]; } var primes = [2]; for (let i = 3; i […]

nodejs – pipeappjs控制台到文件

我尝试使用以下代码将appjs控制台导入到文件中: var fs = require('fs'); var logStream = fs.createWriteStream(__dirname+ '/log.txt', { flags: 'a' }); process.stdout.pipe(logStream); process.stderr.pipe(logStream); console.log("test"); 它会创build一个空文件,但仅此而已…使用node.exe时,“testing”会进入控制台,而不会进入日志文件。 该平台是win32,但我不认为这是重要的。 代码有什么问题? 结论: Stdout,stderr和一个文件写入stream都是sinktypes的端点,所以我不能将它们绑定在一起。 我需要用双工模拟stream来replacestdout和stderr,这样我就可以将这些模拟stream绑定到原始接收器和日志接收器。 我不确定console.log和console.error是否会受到用build议的超新星机制replacestream的影响,我宁愿使用一个专用的logging器,而不是使用这个解决方法。