2

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

它建议我们使用该pg对象来创建池化客户端。在pg.connectapi 文档中说:

connect 方法从客户端池中检索客户端,或者如果池中的所有客户端都忙且池未满,则 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每次我想进行查询时都调用正确的方法吗?如果没有,更好的主意是什么?

4

2 回答 2

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 });
    });
  });
});

但是,鉴于您完成工作的方式,我不相信您可以通过这种方法获得很多收益,因此我认为您的方法没有任何问题。

于 2013-11-08T02:15:21.790 回答
0

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

它将解决任何后顾之忧,让您的编码体验更加愉快。:)

于 2014-08-16T08:53:36.037 回答