NodeJS Postgres助手 - 释放连接

时间:2017-10-08 16:09:36

标签: node.js database postgresql release pool

我制作了postgres帮助器,用于连接数据库和执行查询。代码:

var pg = require('pg');
var dbConn = require('../config.json').dbConn;
var pool = new pg.Pool(dbConn);

var status = {
    "OK": 0,
    "ERROR": 1
};
var message = {
    "success": "success",
    "error": "error",
    "databaseError": "Database error"
};

var helper = {
    query: function (query, params, success, error) {
        pool.connect(function (err, client, done) {
            if (err) {
                error({
                    status: status.ERROR,
                    message: message.databaseError,
                    data: err
                });
                return;
            }
            client.query(query, params, function (err, result) {
                //call `done()` to release the client back to the pool
                done();

                if (err) {
                    error({
                        status: status.ERROR,
                        message: message.databaseError,
                        data: err
                    });
                    return;
                }
                success({
                    status: status.OK,
                    message: message.success,
                    result: result
                });
            });
        });
    }
};

module.exports = helper;

执行查询后,它没有释放连接的逻辑。所以过了一会儿,我得到数据库错误:“客户太多......” 谁能告诉我怎么做?一旦我尝试了某些东西(调用close()或release()函数),但它破坏了连接,我无法发出新请求,直到我重新启动应用程序。

1 个答案:

答案 0 :(得分:0)

你这样做的方式,你没有利用池,而是每次使用你的助手时都建立一个池。如果您正在使用事务,您应该查看pool.query方便方法,它将处理您想要的大部分内容:

const { Pool } = require('pg')

const pool = new Pool()

pool.query('SELECT * FROM users WHERE id = $1', [1], (err, res) => {
  if (err) {
    throw err
  }

  console.log('user:', res.rows[0])
})

https://node-postgres.com/features/pooling#single-query