【问题标题】:node-postgres, express with pg-pool, sending data to Angular frontendnode-postgres,用 pg-pool 表达,将数据发送到 Angular 前端
【发布时间】:2016-10-26 13:44:14
【问题描述】:

我正在使用pg-pool 汇集到我的 Postgres 数据库的连接。但是,我在将查询结果发送到前端时遇到了麻烦。我假设我可以像往常一样使用res.send,但它不被识别(我也尝试过return)。这是我的功能:

exports.featList = function (req, res) {
 pool.connect(function(err, client, done) {
  if (err) {
   return console.error('error fetching client from pool', err);
  }
  client.query('SELECT * FROM book WHERE featured=true', function (err,res) {
   var json = JSON.stringify(res.rows);
   return json;
   client.release();
 });
});

【问题讨论】:

    标签: node.js postgresql node-postgres pgpool


    【解决方案1】:

    似乎没有返回结果,因为在client.query 的回调中,您重新声明了 res 变量,因此您无法访问响应对象。如果将此变量从 res 重命名为 results,它将能够将结果返回给客户端:

    exports.featList = function (req, res) {
      pool.connect(function (err, client, done) {
        if (err) {
          return console.error('error fetching client from pool', err);
        }
        client.query('SELECT * FROM book WHERE featured=true', function (err, results) {
          var json = JSON.stringify(res.rows);
          res.json(json);
          client.release();
        });
      });
    }
    

    【讨论】:

    • 哎呀,谢谢,我实际上只是打错了(在实际代码中正确)。我开始认为我的问题是在client.query 中包含发送代码。我相信它需要走出去,只是在哪里工作。
    • @eabates 这种方法感觉不对,因为您不应该在每个请求上都创建连接,并且它不应该存在于中间件中。您必须将pool.connect 移动到另一个将成为数据库连接器的文件/lib 中,并且当您启动应用程序以连接到数据库时。这个文件/lib 应该有一个函数,可以在需要时返回客户端(在你的情况下是中间件)
    • 其实我必须在res.send之前做client-release。
    • 嗯,我确实在一个单独的模块中连接到数据库,但据我所知pool.connect 是将单个客户端放入池中的方法(如果它是“空闲”则将其删除”)。我一直在监视我与 `pg_stat_activity' 的联系,它们确实有起有落...
    • 我不知道 node-pg-pool。与 node-postgres 池有什么区别?我以为这就是你使用的。上面的答案解决了你的问题吗?
    猜你喜欢
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 2014-12-20
    • 2019-01-25
    • 1970-01-01
    相关资源
    最近更新 更多