我制作了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()函数),但它破坏了连接,我无法发出新请求,直到我重新启动应用程序。
答案 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])
})