如何使用Prototype Ajax.request捕获stream结果

高层次概述:

我有一个nodejs expressjs服务器,它使用名为pg的PostgreSQL nodejs驱动程序。 我有一个HTML文件提供给客户端浏览器,当你点击一个button调用expressjs服务器上的expressjs路由。 这条路线将从PostgreSQL数据库中select数据并将其返回给客户端html文件。 问题是路由对查询中选中的每一行发出一个响应给数据库。 所有的客户端(HTML浏览器)都是第一行。 我可以写入到nodejs控制台服务器端,并获得所有的行显示,但显然,我知道我的网页上很好。

问题:如何让我的客户端html文件写入到客户端的控制台上,以便从expressjs route / pg中发出的每一行? 我的假设是在客户端onSuccess将被解雇我的expressJS路线发出的每一行。

NodeJS \ ExpressJS服务器文件:

var express = require('express'); var pg = require('pg'); var app = express(); var MemoryStore = express.session.MemoryStore; var conString = "postgres://joe_user:password@localhost/dev_db"; var client = new pg.Client(conString); client.connect(); app.get('/home', function(req,res){ res.sendfile(__dirname + '/views/index.html'); }); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use ( express.session ( { key: 'some-key', secret: 'some-We1rD sEEEEEcret!', cookie: { secure: true }, store: new MemoryStore({ reapInterval: 60000 * 10 }) } ) ); app.use ( function(err, req, res, next) { // logic console.error(err.stack); res.send(500, 'Something broke!'); } ); app.get('/pg', function(req, res) { var query = client.query("SELECT * FROM junk_data;"); //Returns 7000 rows with 8 columns total query.on('row', function(row) { res.send(row); console.log(row); } ); } ); process.on('uncaughtException', function (err) { console.log(err); }); app.listen(4000); 

HTML文件:

 <!DOCTYPE HTML> <html lang="en"> <head> <meta charset="utf-8"> <title>Demo: dojo/request/xhr</title> <!--<link rel="stylesheet" href="style.css" media="screen">--> <!--<link rel="stylesheet" href="../../../resources/style/demo.css" media="screen">--> </head> <body> <h1>Demo: dojo/request/xhr</h1> <p>Click the button below to see dojo/request/xhr in action.</p> <div> <button id="textButton2" onclick="SubmitPGRequest();">Call Express Route For PostgreSQL</button> <!--<input type="button" value="Submit" onclick="SubmitRequest();"/> --> </div> <br /><br /> <div id="resultDiv"> </div> <!-- load dojo and provide config via data attribute --> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.7/prototype.js"></script> <script> function SubmitPGRequest() { new Ajax.Request( '/pg', { method: 'get', onSuccess: function(response){ <!--alert(response.responseText); --> if(response.done) { alert('Done!'); }else { console.log(response.responseText);} }, onFailure: function(){ alert('ERROR'); } }); } </script> < 

/ BODY>

好,所以我想出了一个答案。

使用nodejs pg驱动程序,只要查询完成(结束),就可以发送结果对象中的所有行,并一次发送它们。 下面是我最终在我的expressjs服务器路由中发送所有行回到客户端。

 //fired once the function above has completed firing. query.on('end',(result) { res.send(result.rows);//send all rows back to client. }