Итак, я использую модуль 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
).
Пожалуйста, совет по правильному использованию пула и синтаксису
Спасибо