【问题标题】:Node Postgres Module not responding节点 Postgres 模块没有响应
【发布时间】:2015-04-11 19:52:30
【问题描述】:

我有一个使用 postgres amazon RDS 的 amazon beanstalk 节点应用程序。要将节点与 postgres 接口,我使用node postgres。代码如下所示:

  var   pg      = require('pg'),
        done,client;      

  function DataObject(config,success,error) {

    var PG_CONNECT =  "postgres://"+config.username+":"+config.password+"@"+
                    config.server+":"+config.port+"/"+config.database;
    self=this;
    pg.connect(PG_CONNECT, function(_error, client, done) {
      if(_error){ error();}
      else
      {
        self.client = client;
        self.done = done;
        success();
      }
    });
  }

  DataObject.prototype.add_data = function(data,success,error) {
    self=this;
    this.client.query('INSERT INTO sample (data) VALUES ($1,$2)',
      [data], function(_error, result) {
          self.done();
          success();
    });
  };

为了使用它,我创建了我的数据对象,然后在每次出现新数据时调用 add_data。在 add_data 中,我调用 'this/self.done()' 将连接释放回池。现在,当我反复提出这些请求时,client.query 永远不会回来。在什么情况下会导致数据库接口阻塞/无响应?

【问题讨论】:

    标签: node.js postgresql amazon-elastic-beanstalk amazon-rds


    【解决方案1】:

    你使用池的方式不正确。

    您在函数DataObject 中请求来自池的连接。此函数充当构造函数,每个data object 执行一次。因此从池中只要求一个连接。

    当我们第一次调用add_data时,会执行查询并将连接返回到池中。因此,由于连接已返回,因此后续调用不成功。

    您可以通过登录_error 来验证这一点:

    DataObject.prototype.add_data = function(data,success,error) {
      self=this;
      this.client.query('INSERT INTO sample (data) VALUES ($1,$2)',
        [data], function(_error, result) {
            if(_error) console.log(_error);    //log the error to console
    
            self.done();
            success();
      });
    };
    

    有几种不同的方法:

    1. 为每个查询请求连接。因此,您需要将请求池的代码移动到功能add_data
    2. 在执行所有查询后释放client。这是一种棘手的方式,因为调用是异步进行的,您需要注意client 不共享,即在client.query 回调函数完成之前不会发出新请求。

    【讨论】:

    • 优秀。从文档中我不清楚每次需要查询数据库时都需要打开连接。我认为客户端对象是池。
    猜你喜欢
    • 2019-05-27
    • 2015-10-15
    • 2011-06-02
    • 2020-07-02
    • 2021-02-07
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    相关资源
    最近更新 更多