writestream和表示为json对象?

我可能没有深入,但我真的需要一些工作。 我认为一个写/读stream将解决我的问题,但我不太了解它的语法或工作需要什么。 我阅读stream手册,并认为我理解了一些基础知识,但是当我尝试将其应用于我的情况时,它似乎打破了。

目前我有这个作为我的信息的关键。

function readDataTop (x) { console.log("Read "+x[6]+" and Sent Cached Top Half"); jf.readFile( "loadedreports/top"+x[6], 'utf8', function (err, data) { resT = data }); }; 

即时通讯使用Jsonfile插件节点,这基本上缩短了fs.write,并使其更容易写入,而不是不断地写fs.write和读取catch和try块。

无论如何,我想在这里实现一个stream,但我不确定将会发生什么,我的明确结束,如何接收对象。

我认为,因为它的streamexpression不会做任何事情的对象,直到它收到它? 或者我将不得不写一个callback,以确保什么时候我的函数被调用,stream完成之前快递发送的对象,以满足ajax请求?

 app.get('/:report/top', function(req, res) { readDataTop(global[req.params.report]); res.header("Content-Type", "application/json; charset=utf-8"); res.header("Cache-Control", "max-age=3600"); res.json(resT); resT = 0; }); 

我希望如果我改变阅读部分stream将它分离两个问题。 由于较大的json对象的读取速度,当浏览器发出ajax调用时,有时会接收到公正的json文件。 (这可能是我需要解决的callback问题,但是stream应该使其更加一致)。

然后,第二,当我加载这个节点的应用程序,它需要运行30 +写入文件,而它从我的数据库中获取数据。 目标是断开浏览器从数据库端,所以节点作为数据库通过阅读和写作。 这是由于一个旧的SQL服务器已经被大量的请求轰炸(陈旧的数据不是一个问题)。

任何帮助这里的语法?

有一个教程,我可以看到在一个人的代码pipe道响应写入stream? (我使用的mssql节点将SQL响应放入一个对象,我需要JSON格式)。

 function getDataTop (x) { var connection = new sql.Connection(config, function(err) { var request = new sql.Request(connection); request.query(x[0], function(err, topres) { jf.writeFile( "loadedreports/top"+x[6], topres, function(err) { if(err) { console.log(err); } else { console.log(x[6]+" top half was saved!"); } }); }); }); }; 

你的问题是你没有在发送响应之前等待文件加载。 使用callback:

 function readDataTop(x, cb) { console.log('Read ' + x[6] + ' and Sent Cached Top Half'); jf.readFile('loadedreports/top' + x[6], 'utf8', cb); }; // ... app.get('/:report/top', function(req, res) { // you should really avoid using globals like this ... readDataTop(global[req.params.report], function(err, obj) { // setting the content-type is automatically done by `res.json()` // cache the data here in-memory if you need to and check for its existence // before `readDataTop` res.header('Cache-Control', 'max-age=3600'); res.json(obj); }); });