Node.js:如何传递一个readStream作为函数参数,并在callback中使用?

我想将一个stream作为parameter passing给一个函数,并在asynchronouscallback中使用它,但它被销毁(stream.readable为false) 例如: var test = require('./test'); var file = fs.createReadStream('./file.txt'); test(file, console.log); 并在test.js中: module.exports = function(stream, callback) { //stream.pipe(process.stdout); ///////// STREAM IS READABLE HERE doSomething('abc', function(err) { stream.pipe(process.stdout); ///////// STREAM IS NOT READABLE HERE callback(err); }); }; enter code here 为什么会这样呢? 我能做些什么来callback?

玉郎 – 如何手动添加一个新的行?

我有这样的代码 ul.nav li.item a(href='#') ul li a(href='#') 它转换为 <ul class="nav"> <li class="item"><a href="#"></a> <ul> <li><a href="#"></a></li> </ul> </li> </ul> 预期结果: <ul class="nav"> <li class="item"> <a href="#"></a> <ul> <li> <a href="#"></a> </li> </ul> </li> </ul> 我怎样才能得到一个正确的缩进? 我已经尝试从http://scalate.fusesource.org/documentation/jade-syntax.html Whitespace Removal: > and <规则,但它们不起作用。 我做错了什么?

处理snmp陷阱并使用节点js在本地主机上通知

我正在尝试侦听标准UDP 162端口上的snmp陷阱,然后parsing并输出它们。 我已经查看了snmpjs和snmp本地插件的节点,他们似乎主要代理人的一代。 我想要做的是听取和解码陷阱和通知,转发到我的本地主机(甚至可能承认通知)。 我知道我可以用dgram和ASN.1BER花很多时间,但是宁愿使用已经写好的snmp代码。 var dgram = require('dgram'); //var snmp = require('snmpjs'); var snmp = require('snmp-native'); var server = dgram.createSocket("udp4"); server.on("listening", function() { var addr = server.address(); console.log("Server listening "+ addr.address + ":" + addr.port); }); server.on("message", function (msg, rinfo) { console.log("From " + rinfo.address + ":" + rinfo.port); console.log("server got: " + msg); […]

节点mongodb-native周围的最小层

我写了可能是node-mongodb-native包装器中最小的包装器。 但是,我觉得它需要改进。 它太小了,它适合在这里舒适: function MongoWrapper() { this.db = null; }; var mongoWrapper; module.exports = exports = mongoWrapper = new MongoWrapper; // This means that you can do `new include('mongoWrapper').MongoWrapper()` mongoWrapper.MongoWrapper = MongoWrapper; // ObjectId is the most handy method of all. This will work with // native BSON or Pure BSON mongoWrapper.ObjectId = function() { […]

Node.js Socket.io,socket.emit不起作用

我在这里很新。 我试图在这种情况下使用发射function没有运气:(。 服务器端: socket.on('newUser', function(msg){ ConnectedSockets ++; var player; player = new Player(); player.CreatePlayer(msg.id, msg.name, msg.status); socket.id=msg.id; socket.name=msg.name; sockets[socket.id] = socket; for(i in sockets){ var myVar=sockets[i].name; socket.emit('listing',{name: myVar} ); } }) ; 客户端: socket.on('listing', function(msg){ $('#list').val($('#list').val() + "\n"+msg.name); }) ; 当我在node.js控制台上发送newUser事件时,没有消息出现在响应中。 如果我在for循环中编写sys.puts("socket name:"+ myVar) ,则所有套接字名称都按我的预期显示。 为什么客户没有收到任何答复(没有错误信息或任何types的警告)? 🙂

node-mongodb-native或Mongoose

我们将开发一个可以和MongoDB一起工作的应用程序。 应用程序的用户将在GUI的帮助下创build自定义实体,所以在开发应用程序时我们没有任何预定义的实体。 我们应该与MongoDB本地或使用mongoose? 谢谢。

NodeJS – 正在下载的videostream

我正在编写一个程序,将stream式传输当前正在下载到驱动器上的video文件。 我遇到的问题似乎是让浏览器实际播放video。 该脚本监听文件的变化,然后stream其余的,但除了显示一个空白的video页面之外浏览器不做任何事情。 var fs = require('fs'), http = require('http'), filename = '/home/qrpike/Videos/topgears.mp4'; http.createServer(function (req, res) { console.log(req.url); if( req.url == '/video.mp4'){ res.writeHead(200,{ 'Content-Type' : 'video/mp4', 'Cache-Control' : 'public', 'Connection' : 'keep-alive', 'Content-Disposition' : 'inline; filename=topgears.mp4;', 'Content-Transfer-Encoding' : 'binary', 'Transfer-Encoding' : 'chunked' }); fs.open(filename, 'r', function(err, fd) { if (err) throw new Error('Could not open […]

socket.io不能获得客户端的数量

我正在制作一个游戏,当我尝试获取用户数时,我想创build2个用户房间 io.sockets.emit('roomUsers', io.sockets.clients(openRoom).lenght); node.js崩溃 这是我得到的日志,我不知道这是什么意思: /Users/ilya/game-app-1/node_modules/socket.io/lib/parser.js:75 data = JSON.stringify(ev); ^ TypeError: Converting circular structure to JSON at Object.stringify (native) at Object.exports.encodePacket (/Users/ilya/game-app-1/node_modules/socket.io/lib/parser.js:75:19) at SocketNamespace.packet (/Users/ilya/game-app-1/node_modules/socket.io/lib/namespace.js:154:23) at SocketNamespace.emit (/Users/ilya/game-app-1/node_modules/socket.io/lib/namespace.js:188:15) at Socket.<anonymous> (/Users/ilya/game-app-1/app.js:101:14) at Socket.EventEmitter.emit [as $emit] (events.js:96:17) at SocketNamespace.handlePacket (/Users/ilya/game-app-1/node_modules/socket.io/lib/namespace.js:335:22) at Manager.onClientMessage (/Users/ilya/game-app-1/node_modules/socket.io/lib/manager.js:488:38) at WebSocket.Transport.onMessage (/Users/ilya/game-app-1/node_modules/socket.io/lib/transport.js:387:20) at Parser.<anonymous> (/Users/ilya/game-app-1/node_modules/socket.io/lib/transports/websocket/hybi-16.js:39:10)

仅使用节点二进制运行的nodejs程序

要运行node.js程序,如果我只复制节点二进制文件,那么我看到它工作正常。 只是想知道,如果我不安装node.js,只复制bin目录中的节点二进制文件,有没有可能无法正常工作。

在Cassandra使用CQL宽行 – 得到奇怪的错误

我试图在Cassandra中存储一个博客的评论,并提出了这个模式(从这里得到的想法): create table comments ( slug varchar, ts timestamp, value text, primary key (slug,ts)); 使用CQL(我用Helenus驱动程序使用node.js)我试图添加一些数据到它,这是迄今为止: var helenus = require('helenus'), pool = new helenus.ConnectionPool({ hosts: ['localhost:9160'], keyspace: 'blogks' }); pool.on('error', function(err) { console.error(err.name, err.message); }); module.exports.addComment = function(slug, comment,callback){ pool.connect(function(connErr,keyspace){ if(connErr){ callback(connErr); return; } var cql = "INSERT INTO comments (slug,ts,value) VALUES (?, ?, ?);"; pool.cql(cql,[slug,serializeDate(new […]