我已经阅读了node-postgres的API文档。
它建议我们使用pg
对象来创建池化客户端。在pg.connect
api文档中说:
connect方法从客户端池中检索客户端,或者全部检索客户端 池化客户端很忙,池没有满,连接方法 将创建一个新客户端将其第一个参数直接传递给 客户端构造函数。
所以根据建议,使用pg.connect
是否意味着“使用pg
对象来创建池化客户端”?如果不是,它究竟意味着什么?
在我的实现示例中,我在我的路线中提出了几个问题:
app.get('/post', function(req, res) {
pg.connect(dbconfig, function(err, client, done) {
client.query('SELECT * FROM post', function(err, result) {
res.render('post/list', { posts: result.rows });
});
});
});
app.get('/post/new', function(req, res) {
res.render('post/new');
});
app.post('/api/v1/post', function(req, res) {
var b = req.body;
pg.connect(dbconfig, function(err, client, done) {
client.query('INSERT INTO post (title, content) VALUES ($1, $2)',
[b.title, b.content],
function(err, result) {
done();
res.redirect('/post');
});
});
});
每次我想查询时,是否是调用pg.connect
的正确方法?如果没有,有什么更好的主意?
答案 0 :(得分:0)
根据pg.connect()确实处理池连接的文档,看起来确实如此。不过我建议你做一件事可能会做得更好(假设你的应用只使用了一套凭据)。
如果我正在考虑这样做,我会努力保存重复的工作/击键/错误机会,并考虑将pg.connect()包装在某些你可以使用它会返回客户端的函数中。这将使您能够执行更多类似的操作:
app.get('/post', function(req, res) {
db.run( function(client) {
client.query('SELECT * FROM post', function(err, result) {
res.render('post/list', { posts: result.rows });
});
});
});
然而,考虑到你完成任务的方式,我不相信你通过这种方法可以获得很多好处,所以我认为你的方法没有任何问题。
答案 1 :(得分:0)
现在这可能有点过时,但请看一下: https://github.com/aichholzer/Bodega
它将解决任何烦恼,让您的编码体验更愉快。 :)