pipe理node-postgres查询

我已经阅读了node-postgres的API文档。

它build议我们使用pg对象来创build池式客户端。 而在pg.connect API文件中说:

connect方法从客户端池中检索客户端,或者如果所有共用客户端都忙且池未满,则connect方法将创build一个新的客户端,将其第一个参数直接传递给客户端构造函数。

所以根据这个build议,使用pg.connect意味着“使用pg对象来创build池客户端”? 如果不是,那实际上是什么意思?

在我的实现示例中,我在我的路线中做了几个查询:

 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是否正确? 如果没有,有什么更好的主意?

它看起来,根据文档,pg.connect()确实处理池连接。 然而,我会build议一件事,你可能会做得更好(假设你只有一套你的应用程序使用的凭据)。

如果我正在考虑这样做,我会努力保存重复工作/击键/错误的机会一点,并看看在某种可以使用,将返回客户端的函数包装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 }); }); }); }); 

但是,考虑到你做事的方式,我不相信你有这么一个方法可以获得很多,所以我没有看到你的方法有什么问题。

这可能有点过时,但看看这个: https : //github.com/aichholzer/Bodega

它会照顾任何的忧虑,让你的编码体验更愉快。 🙂