2

高レベルの概要:

pgというPostgreSQL nodejsドライバーを利用するnodejs expressjsサーバーがあります。ボタンをクリックすると、私のexpressjsサーバーでexpressjsルートを呼び出すクライアントブラウザに提供されるhtmlファイルがあります。このルートは、PostgreSQL データベースからデータを選択し、それをクライアントの html ファイルに返します。問題は、ルートがクエリで選択されたすべての行に対してデータベースへの応答を発行することです。クライアント (html ブラウザ) が取得するのは最初の行だけです。nodejs コンソール サーバー側に書き込み、すべての行を表示することができますが、明らかに、それは自分の Web ページでよくわかります。

質問: Expressjs ルート /pg から出力されるすべての行について、クライアントの html ファイルをクライアントのコンソールに書き込むにはどうすればよいですか? 私の前提は、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: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>
    <

/本体>

4

1 に答える 1

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.
}
于 2012-10-20T22:21:10.987 に答える