Innanzitutto, dalla documentazione pg *:
const { Pool } = require('pg')
const pool = new Pool()
// the pool with emit an error on behalf of any idle clients
// it contains if a backend error or network partition happens
pool.on('error', (err, client) => {
console.error('Unexpected error on idle client', err) // your callback here
process.exit(-1)
})
// promise - checkout a client
pool.connect()
.then(client => {
return client.query('SELECT * FROM users WHERE id = $1', [1]) // your query string here
.then(res => {
client.release()
console.log(res.rows[0]) // your callback here
})
.catch(e => {
client.release()
console.log(err.stack) // your callback here
})
})
Questo codice/costrutto è sufficiente /fatto per far funzionare la tua piscina, fornendo la tua cosa qui le cose. Se chiudi l'applicazione, la connessione si bloccherà normalmente, poiché il pool è stato creato bene, esattamente per non bloccarsi, anche se fornisce un modo manuale per appendersi, vedere l'ultima sezione del articolo .Guarda anche la precedente sezione rossa che dice "Devi sempre restituire il cliente..." per accettare
- il
client.release()
obbligatorio istruzioni - prima di accedere all'argomento.
- tu cliente ambito/chiusura all'interno delle tue richiamate.
Allora , dalla documentazione pg.client *:
Query di testo normale con una promessa
const { Client } = require('pg').Client
const client = new Client()
client.connect()
client.query('SELECT NOW()') // your query string here
.then(result => console.log(result)) // your callback here
.catch(e => console.error(e.stack)) // your callback here
.then(() => client.end())
mi sembra la sintassi più chiara:
- chiudi il cliente qualunque siano i risultati.
- accedi al risultato prima di terminare il cliente.
- non rilevi/chiudi il client all'interno delle tue richiamate
È questo tipo di opposizione tra le due sintassi che può confondere a prima vista, ma non c'è magia lì dentro, è la sintassi della costruzione dell'implementazione. Concentrati sul tuo richiami e domande, non su quei costrutti, prendi solo il più elegante per i tuoi occhi e alimentalo con il tuo codice.
*Ho aggiunto i commenti // il tuo xxx qui per chiarezza