node-postgresは次のように述べています。
node-postgres は、「イベント エミッター」スタイルの API と「コールバック」スタイルの両方をサポートしています。コールバック スタイルはより簡潔で一般的に好まれますが、イベント API が便利です。それらは混合して一致させることができます。
イベント エミッター API を使用すると、次のことができます。
var db = new pg.Client("insert-postgres-connection-info");
db.connect();
そして、 を使用db
して、Web アプリ全体でクエリを実行できますdb.query('sql statement here')
。コールバック スタイルでは、クエリを実行するたびに次のようにします。
pg.connect(conString, function(err, client) {
client.query("sql statement", function(err, result) {
// do stuff
});
});
だから私の質問は、コールバックスタイルを使用することが「一般的に好まれる」のはなぜですか? データベースで何かをするたびに接続を開くのは非効率的ではありませんか? コールバック スタイルを使用する利点は何ですか?
編集
「コールバック スタイル」とは何を意味しているのか誤解されているかもしれませんが (冗談ではありません。私の JavaScript はあまり強力ではありません)、私の質問は接続方法に関するものです。以下がコールバック スタイルの接続方法であると仮定しました。
// Simple, using built-in client pool
var pg = require('pg');
//or native libpq bindings
//var pg = require('pg').native
var conString = "tcp://postgres:1234@localhost/postgres";
//error handling omitted
pg.connect(conString, function(err, client) {
client.query("SELECT NOW() as when", function(err, result) {
console.log("Row count: %d",result.rows.length); // 1
console.log("Current year: %d", result.rows[0].when.getYear());
});
});
以下は、EventEmitter API の接続方法です。
// Evented api
var pg = require('pg'); //native libpq bindings = `var pg = require('pg').native`
var conString = "tcp://postgres:1234@localhost/postgres";
var client = new pg.Client(conString);
client.connect();
ここで用語が混同されているだけなら、私の質問はまだ残っています。pg.connect(do queries)
使用するたびに新しい接続を開きます(そうではありませんか?)一方、
var client = new pg.Client(conString);
client.connect();
接続を開き、client
必要に応じてクエリを実行できるようにしますか?