通过apache日志(下面),我可以parsing出一个JSON: [2014.02.14_21.24.22.543] other info I don't care about json: { "petstore": "store_number_8", "dogs":{ "terrier":{ "total":2 } }, "cat":{ "siamese":{ "total":5 } } } 1)这是有效的JSON? 2)为什么双引号变成单引号? 读完之后,parsing出JSON并显示出来,我得到以下结果: { 'petstore': 'store_number_8', 'dogs':{ 'terrier':{ 'total':2 } }, 'cat':{ 'siamese':{ 'total':5 } } } 顺便说一下,我使用Node.js的fs.createStream来读取日志,然后只是做一个控制台(到目前为止,我没有做任何消毒,最终我会写它到一个文件)。 fs.creatReadStream(logs).pipe(split()).on(data, function(line){ if(line.match(/json\:/)){ shouldThisBeValidJSON = JSON.parse(line.slice(line.indexOf('{'), line.length)); console.log(shouldThisBeValidJSON); } 先谢谢你。
我试图确定什么时候WriteStream节点写完了: var gfs = GFS(db); var writeStream = gfs.createWriteStream( { filename: "thismyfile.txt", root: "myfiles" }); writeStream.on("finish", function() { console.log("finished"); response.send({ Success: true }); }); writeStream.write("this might work"); writeStream.end(); console.log("end"); 在我的控制台,我看到“结束”,但从来没有“完成”,而且从来没有回应。 然而,stream正在写入正确,似乎正在完成(我看到在数据库中完成的文件)。 这甚至不是开火。 我试着将“这可能工作”移动到end()和去除write()的调用中,我也尝试将一个string传递给end()。 该string被写入stream,但仍然没有callback。 为什么这个事件不会被解雇? 谢谢。
在不使用data事件的情况下,我希望此代码logging每个密钥的unicode引用,因为我将其按下。 我不明白为什么我每次都得到Null 。 每当我按下我的键盘上的一个键,我会触发一个可读的事件process.stdin运行一个callback,它允许我从这个可读的stream中读取数据。 那么为什么它没有从我的按键中保存任何数据呢? // nodo.js function nodo() { var stdin = process.stdin; var stdout = process.stdout; if (stdin.isTTY) { stdin.setRawMode(true); stdin.setEncoding('utf8'); stdin.resume(); stdout.write('\u000A>Bienvenido\u000A'); } else { process.exit(); } stdin.on('readable', function(){ var input = stdin.read(); console.log(input); }); } nodo(); 我感谢你的关注。
我使用Node.js请求库和node-feedparser来捕获feed,并使用Mongoose将其发布到MongoDB数据库中。 我将发布信息存储到posts集合中,并将feed信息存储到feeds集合中,但是我需要将post._id存储在feeds集合中的一个数组中,名为feeds._post。 我遇到的问题是使用stream接口,feedparser.on('end')在所有feedparser.on('可读')对数据库的asynchronous调用完成之前调用,因此我最终在Post集合中说15个post,在Feed._post数组中只有11个post._id。 我明白,如果这只是普通的JavaScript,我可以使用async来确保.on('end')等待所有.on('可读')的完成,但是我怎样才能解决这个问题呢? ? 提前致谢。 db.Feed.findById(feedid, function(error, feed) { // request.on('response') -> this.pipe(feedparser) feedparser.on('readable', function() { var post; while (null !== (post = this.read())) { db.Post.create({ /* post details */ }, function(err, post) { feed._post.push(post); }); } }); feedparser.on('end', function() { feed.save(); }); });
考虑一个简单的例子: stream = require 'stream' util = require 'util' class TestTransform extends stream.Transform _transform: (chunk, encoding, callback) -> if not @noMore @noMore = true @unshift chunk # I will handle you later else @push " <#{chunk.toString().toUpperCase()}>" callback() mt = new TestTransform() mt.write 'first' mt.write 'second' mt.on 'data', (chunk) -> console.log "data: #{util.inspect chunk.toString()}" $ coffee […]
使用node.js 0.10的stream.Writable基类,如何处理消费者调用.end() ,从而发出信号,不再有数据可用? 在文档中唯一被告知在Writable子类中实现的方法是_write ,但是我找不到任何干净的方式来注意input已经耗尽。
我是新来的节点,并与mssql工作,以连接到SQL Server。 任何人都可以帮助给我一个更完整的mssqlstream的例子。 我发现git的例子模糊,不知道从哪里开始。 任何援助将不胜感激。 var sql = require('mssql'); var config = { user: '…', password: '…', server: 'localhost', // You can use 'localhost\\instance' to connect to named instance database: '…', stream: true, options: {// Use this if you're on Windows Azure } } sql.connect(config, function(err) { var request = new sql.Request(); request.stream = true; […]
我正在使用多方上传文件; 我对Node.JS和stream媒体是如此的陌生; 所以我的问题是,是否正确,如果我通过在form.parse()返回的file.path文件stream如我在我的企图代码中做的方式? 我的意思是这是绝对path,显然是在本地主机上工作,因为它是我当前服务器的本地主机的绝对path,但当用户试图从他们的计算机上传文件时,它也会工作吗? form.parse(req, function (err, fields, files) { var rs= fs.createReadStream(files.file[0].path); var fileDate; rs.on('readable', function () { while (null !== (chunk = rs.read())) { fileDate += chunk; } }); rs.on('end', function () { console.log('importedData', fileDate); }); }); 谢谢,请让我知道如果你需要更多的澄清!
我正在尝试索引一个大(1 500 000行)文件并将其推送到弹性search。 为了做到这一点,我使用节点jsstream; 但是,我一直在耗尽内存。 我究竟做错了什么? var rl = null; initialize(function() { var stream = fs.createReadStream(process.argv[2]); rl = readline.createInterface({input: stream, terminal: false}); var i = 0; rl.on('line', function(line) { rl.pause(); processObject(++i, extractObject(line)); }); rl.on('close', function() { console.log('\nRefreshed index;'); process.exit(); }); }); function processObject(number, input) { client.index({ index: INDEX, type: TYPE, id: number, body: input }, […]
我正在使用zlib.Inflate来膨胀一大块数据。 我现在的问题是,我所知道的是有多less个未压缩的数据字节,但没有多less压缩的数据stream。 我目前只是写入整个input缓冲区到inflater,然后从它读取未压缩的字节数量。 这给了我正确的输出数据,但我必须知道有多less字节被用来继续parsing剩余的数据。 所以现在我做了以下testing: var inflater = zlib.createInflate(); inflater.write(strm.buffer.slice(strm.position)); inflater.on("readable", (function(inflater, len) { return function() { console.log(inflater); var decompData = inflater.read(len); console.log(inflater); var output = fs.createWriteStream("output.bin"); output.write(decompData); } })(inflater, len)); 我在读取之前和之后检查了充电器的所有成员,但是没有任何变化,除了读缓冲器(具有解压缩的数据)之外的每个值都是相同的。 有没有一种方法可以确定从压缩缓冲区读取了多less个字节? 先谢谢了,Cromon