私はノード、postgresql、および Web 開発ビジネス全体に不慣れです。私は現在、postgres データベースに接続し、テーブルの内容を Web ビューに表示する単純なアプリを作成しています。アプリは OpenShift でホストされます。
私の主なエントリは次のserver.js
とおりです。
var pg = require('pg');
pg.connect(connection_string, function(err, client) {
// handle error
// save client: app.client = client;
});
GET /
次に、リクエストを処理します。
function handle_request(req, res){
app.client.query('...', function(err, result){
if (err) throw err; // Will handle error later, crash for now
res.render( ... ); // Render the web view with the result
});
}
私のアプリは動作しているようです: テーブルは Web ビューで正しくレンダリングされ、複数の接続 (異なるデバイスからの異なる Web クライアント) で動作します。ただし、数分間リクエストがない場合、後続のリクエストはタイムアウト情報でアプリをクラッシュさせます。スタック情報は次のとおりです。
/home/hai/myapp/server.js:98
if (err) throw err;
^
Error: This socket is closed.
at Socket._write (net.js:474:19)
at Socket.write (net.js:466:15)
at [object Object].query (/home/hai/myapp/node_modules/pg/lib/connection.js:109:15)
at [object Object].submit (/home/hai/myapp/node_modules/pg/lib/query.js:99:16)
at [object Object]._pulseQueryQueue (/home/hai/myapp/node_modules/pg/lib/client.js:166:24)
at [object Object].query (/home/hai/myapp/node_modules/pg/lib/client.js:193:8)
at /home/hai/myapp/server.js:97:17
at callbacks (/home/hai/myapp/node_modules/express/lib/router/index.js:160:37)
at param (/home/hai/myapp/node_modules/express/lib/router/index.js:134:11)
at pass (/home/hai/myapp/node_modules/express/lib/router/index.js:141:5)
接続がタイムアウトしないようにする方法はありますか (より良い)? または、オンデマンドで再接続するには (最適)? 最初にデータベースに接続するのではなく、GET /
リクエストに応じてアプリを再設計しようとしました。このソリューションは最初のリクエストでのみ機能し、2 番目のリクエストでクラッシュしました。どんな洞察も高く評価されます。