使用池每分钟连接到数据库

时间:2017-08-21 13:59:39

标签: javascript node.js postgresql

我希望每分钟使用池连接PostgreSQL数据库。 我的职责是:

module.exports.deleteExpiredAd = function(callback) {
    var response = {};
    var queryText = "begin transaction; 
                 update ad set deleted=true where date_to < current_date; 
                 update ad_ad_group set deleted=true from ad where 
                 ad.date_to < current_date; 
                 commit;"
    pool.connect(function(err, client, done) {
        if(err) {
            response.code = 1;
            callback(err, response, 400);
            return console.error('error fetching client from pool', err);
        }
        client.query(queryText, function(err, result) {
            client.release();
            if(err) {
                   console.log(err);
                   response.code = 1;
                   response.message = 'expired ads have not been deleted';
                   callback(err, response, 400);
                   return console.error('error running query', err.code);
            }       
            response.code = 0;
            response.message = 'expired ads have been deleted'
            //client.destroy()
            callback(err, response, 201);
      });
    });
};

这个函数我使用setTimeout从另一个文件调用(我试过setInterval,但是没有区别)

var checker = function(){
  setTimeout(function(){
      console.log("calling api")
      modelAd.deleteExpiredAd(function(){

      })
  },60000);
}
checker();

但是当我启动服务器时,会出现错误: enter image description here

我已经尝试在功能结束前关闭池,但后来我不确定是否可以重新打开它。

1 个答案:

答案 0 :(得分:0)

试试这个:

var checker = function(){
  setInterval(function(){
      console.log("calling api")
      modelAd.deleteExpiredAd(function(){

      })
  },60000);
}
checker();

1000是1秒,因此超出了客户端限制,因为它每隔一秒被调用一次,而不是每分钟调用一次。 60000是1分钟(毫秒)

每次调用函数时都要关闭池:

module.exports.deleteExpiredAd = function(callback) {
    var response = {};
    var queryText = "begin transaction; 
                 update ad set deleted=true where date_to < current_date; 
                 update ad_ad_group set deleted=true from ad where 
                 ad.date_to < current_date; 
                 commit;"
    pool.connect(function(err, client, done) {
        if(err) {
            response.code = 1;
            callback(err, response, 400);
            return console.error('error fetching client from pool', err);
        }
        client.query(queryText, function(err, result) {
            client.end(callback)
            if(err) {
                   console.log(err);
                   response.code = 1;
                   response.message = 'expired ads have not been deleted';
                   callback(err, response, 400);
                   return console.error('error running query', err.code);
            }       
            response.code = 0;
            response.message = 'expired ads have been deleted'
            //client.destroy()
            callback(err, response, 201);
      });
    });
};