Итак, я использую модуль pg в узле 8.11.1 / express 4.16.3 / pg 7.4.2
Я пытаюсь использовать пул для своего интерфейса (просто выбираю), и примеры несколько сбивают с толку.
В подключении используется только новый пул, а затем он показывает, что я должен сделать pool.end()
const pool = new Pool({
user: 'dbuser',
host: 'database.server.com',
database: 'mydb',
password: 'secretpassword',
port: 3211,
})
pool.query('SELECT NOW()', (err, res) => {
console.log(err, res)
pool.end()
})
Я сделал свой код таким, и он печатает Error: Cannot use a pool after calling end on the pool
Если я выполняю один и тот же запрос несколько раз. Итак, нет pool.end()
В запросах в примерах нет отключения (?)
В конце концов я сделал свой код похожим на pooling. Он показывает функцию pool.on('error', (err, client) => {
, а затем использует client.release()
в пуле, поскольку "pool.query делегирует непосредственно client.query внутренне", я полагаю?
Итак, как правильно использовать пул в pg и как отключаться после каждого запроса или сбоя? Я придумал следующее
const pool = new pg.Pool({
user: 'user',
host: 'localhost',
database: 'myProject',
password: 'secret',
port: 5432
});
pool.on('error', (err, client) => {
console.error('error on client', err, 'on client' , client);
process.exit(-1);
});
app.get('/', (req, res)=>{
pool.connect()
.then(client => {
return client.query('select name from table')
.then(resolved => {
client.release();
res.render('index',{'testData': resolved.rows});
})
.catch(e => { //return client.query
client.release();
res.render('index',{'errorData': e});
})
.catch(e => { //pool.connect()
client.release();
res.render('index',{'errorData': e});
})
})
});
Не знаю, может ли это быть короче. Например, если нужен catch(e => { ////pool.connect()...
или он покрывается pool.on('error', (err, client) => {...
Кроме того, он мог бы быть намного более сортировщиком, если бы он был похож на
const pool = new pg.Pool({
user: 'user',
host: 'localhost',
database: 'myProject',
password: 'secret',
port: 5432
});
app.get('/', (req, res)=>{
pool.query('...')
.then(resolved => {
pool.end();// pool disconnect ???
res.render('index',{
'testData': resolved.rows
});
})
.catch(e => {
pool.end();// pool disconnect ???
res.render('index',{
'testData': e
});
})
});
Но я не знаю, правильно ли это, потому что нет pool.connect
, нет клиента, возвращенного из этого соединения, и нет функции для отключения пула (только для его завершения, который снова заканчивается с Error: Cannot use a pool after calling end on the pool
).
Пожалуйста, посоветуйте правильное использование пула и синтаксис
Спасибо