Tag: node.js stream

使用Oboe.js,MongoDB和Express.js进行JSONstream式传输

我正在用Oboe.js,MongoDB和Express.js通过HTTP实验JSONstream。 重点是在MongoDB (Node.js的mongodb本地驱动器)中执行查询,将它(一个JavaScript数组)传递给Express.js并使用Oboe.js在浏览器中parsing它。 在MongoDB查询服务器端和客户端的JSONparsing中,我做的基准testing比较了streaming和blocking 。 这是两个基准的源代码。 第first number是1000 queries 10 million documents collection中100 items (分页)的1000 queries的毫秒second number ,括号之间的second number表示MongoDB结果数组中第一个项目之前的毫秒数parsing。 stream媒体基准服务器端: // Oboe.js – 20238 (16.887) // Native – 16703 (16.69) collection .find() .skip(+req.query.offset) .limit(+req.query.limit) .stream() .pipe(JSONStream.stringify()) .pipe(res); 阻塞基准服务器端: // Oboe.js – 17418 (14.267) // Native – 13706 (13.698) collection .find() .skip(+req.query.offset) .limit(+req.query.limit) .toArray(function (e, docs) […]

node.js createWriteStream不会在Heroku上创build新文件

我有我的本地主机上运行node.js 0.12.0正常工作的以下代码。 代码创build一个新文件,并从可读的数据中复制数据,但不会在Heroku上创build新文件。 var output = fs.createWriteStream('public/images/test/testfile.png'); readable.pipe(output); 我认为这与权限有关,但每当我使用heroku run bash更改文件夹的权限,然后chmod -R 777 images/ Heroku将其重置为其原始权限,即drwx—— 。 所以可能是这个问题是别的? 请注意,它失败了,没有例外,没有任何logging。

如何在Node.js中设置一个variables为morgan的结果(不logging在控制台上)

我不明白节点中的stream。 我尝试将应用程序的请求和响应信息保存到MongoDB中。 首先,我想为摩根的结果设置一个variables: var apiInfo = morgan('dev') app.use(console.log('test______',apiInfo)) 但是,它不起作用。 我知道这在摩根官方网站: var express = require('express') var fs = require('fs') var morgan = require('morgan') var path = require('path') var app = express() // create a write stream (in append mode) var accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), {flags: 'a'}) // setup the logger app.use(morgan('combined', {stream: accessLogStream})) app.get('/', function (req, […]

Nodejsstream暂停(非pipe理)和恢复(pipe道)中间pipe道

我需要“暂停”一个可读的stream达几秒钟,然后重新开始。 可读stream正在被传送到一个转换stream,所以我不能使用常规的pause和resume方法,我不得不使用unpipe和pipe 。 在转换stream中,我能够检测到pipe事件,然后在可读stream上进行unpipe ,然后在几秒钟后,再次pipe恢复它(我希望)。 这里是代码: main.ts import {Transform, Readable} from 'stream'; const alphaTransform = new class extends Transform { constructor() { super({ objectMode: true, transform: (chunk: string | Buffer, encoding: string, callback: Function) => { let transformed: IterableIterator<string>; if (Buffer.isBuffer(chunk)) { transformed = function* () { for (const val of chunk) { yield String.fromCharCode(val); […]

如何将节点CLI程序的输出传递给shell?

我基本上想要做这样的事情: $ my-node-cli <some-param> | less 请注意, less就只是一个例子。 我需要它与任何其他* nix命令一起工作。 关于用例的更多信息: 我编写了一个节点CLI包,用于search一些在线资源并将结果输出到shell。 由于结果集可以是巨大的,客户端希望对其执行额外的操作,例如, grep , head , tail , tee ,…任何事情。 我search的范围很广,我只能设法find节点的方式,而不是。 我目前的想法是当我的程序被调用时捕获pipe道的右侧,然后,在获得结果后,使用child_process.exec执行与pipe道(和我被调用时记得的那部分) child_process.exec 。 不知道是否可以工作? 请注意,每次我的程序被调用时,这是一个新的过程,即程序没有自己的提示。 谢谢

如何在关键值对的特定位置写入js文件?

我正在写一个使用量angular器的js文件,如下所示: index.js var outputFile = '../Actions/data_write.js'; var username = "someusername"; var password = "somepassword"; var fs = require('fs'); var text = "userCredentials : {username : '"+username+"', password : '"+password+"'};"; fs.writeFile(outputFile, text, function(error){ if(error){ console.log(error); }else{ console.log('data saved to '+outputFile); } }); 我的问题是我无法弄清楚如何在特定位置写入这些数据。 所以现在通过replace旧的内容将文本写入整个文件。 我想写在特定的位置说,我有多个数据与用户名和密码定义在这个文件中的数组。 我想要写入特定的数组。

我怎样才能读取一串JSON对象到浏览器

如下例所示,给定一个node.js样式的对象stream,如何通过网页上的http请求读取并进行处理: {"id":"one", "value":"the first object"} {"id":"two", "value":"the second object"} {"id":"three", "value":"the third object"}

使用nodejs服务器与请求包和函数pipe()?

目前,我正在使用nodejs服务器来模拟后端。 服务器是一个networking服务器,并返回不同的请求json对象,工作无懈可击。 现在我必须从另一个域获取json对象,所以我必须代理服务器。 我在npm中find了一个名为request的包。 我可以得到一个简单的例子工作,但我必须转发整个网页。 我的代理代理如下所示: var $express = require('express'), $http = require('http'), $request = require('request'), $url = require('url'), $path = require('path'), $util = require('util'), $mime = require('mime'); var app = $express(); app.configure(function(){ app.set('port', process.env.PORT || 9090); app.use($express.bodyParser()); app.use($express.methodOverride()); app.use('/', function(req, res){ var apiUrl = 'http://localhost:9091'; console.log(apiUrl); var url = apiUrl + req.url; req.pipe($request(url).pipe(res)); }); […]

Node.js“写完后”的错误

从一个基本的节点应用程序开始,我不知道如何击败这个“写入结束”错误,即使在几个网站上build议的callback。 index.js: var server = require("./server"); var router = require("./router"); var requestHandlers = require("./requestHandlers"); var handle = {} handle["/"] = requestHandlers.start; handle["/start"] = requestHandlers.start; handle["/upload"] = requestHandlers.upload; server.start(router.route, handle); server.js: var http = require("http"); var url = require("url"); function start(route, handle) { function onRequest(request, response) { var postData =""; var pathname = url.parse(request.url).pathname; console.log("Request for […]

从nodejs有效地serialise(和读取)int数组

我正在考虑在nodejs中构build一个应用程序,该应用程序需要传输包含整数数组的大型(> GB)文件。 至关重要的是,arrays需要最优化地进行序列化,所以不是基于ascii的,理想地,对于较小的整数(这将是绝大多数数据)使用8位,但仍然能够表示更大的数字。 这个问题可能比nodejs更多,但是如何在nodejs中进行呢? 是否有从磁盘自定义字节编码stream文件的现成解决scheme? 或者更好,整数数组? 理想情况下,应该可以将stream的每个部分解码为磁盘绑定而不是cpu绑定,即使是ssd也是如此。