node-postgres声明如下:
node-postgres 支持“事件发射器”样式 API 和“回调”样式。回调风格更简洁,通常更受欢迎,但事件 API 可以派上用场。它们可以混合搭配。
使用事件发射器 API,我可以执行以下操作:
var db = new pg.Client("insert-postgres-connection-info");
db.connect();
然后我可以db
使用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
在必要时使用它来运行查询,不是吗?