2012-10-17 40 views
2

高度概括:如何捕獲流結果與原型的Ajax.Request

我有一個expressjs的NodeJS服務器,使得使用PostgreSQL的驅動程序的NodeJS叫皮克。我有一個HTML文件提供給客戶端瀏覽器,當你點擊一個按鈕在我的expressjs服務器上調用expressjs路由。該路由將從PostgreSQL數據庫中選擇數據並將其返回給客戶端html文件。問題是路由爲查詢中選中的每一行發出響應給數據庫。所有的客戶端(html瀏覽器)都是第一行。我可以寫入到nodejs控制檯服務器端並獲取所有要顯示的行,但顯然這對我的網頁非常瞭解。

問題: 如何讓我的客戶端html文件寫入客戶端的控制檯,以便從我的expressjs route/pg中發出的每一行?我的假設是在客戶端上,我的expressJS路由發出的每一行都會觸發onSuccess。

的NodeJS \ ExpressJS服務器中的文件:

var express = require('express'); 
var pg = require('pg'); 

var app = express(); 

var MemoryStore = express.session.MemoryStore; 

var conString = "postgres://joe_user:[email protected]/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>

回答

0

好了,所以我想出了一個回答我的問題。

使用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. 
}