【发布时间】:2016-05-14 19:20:40
【问题描述】:
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 运行查询,不是吗?
【问题讨论】:
标签: node.js postgresql node-postgres