Først fra sidedokumentationen *:
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
})
})
Denne kode/konstruktion er tilstrækkelig /made for at få din pool til at fungere, hvilket giver din ting her ting. Hvis du lukker din applikation ned, vil forbindelsen hænge normalt, da poolen er skabt godt, præcis for ikke at hænge, selvom den giver en manuel måde at hænge på, se sidste afsnit af artikel .Se også på det forrige røde afsnit, som siger "Du skal altid returnere klienten..." for at acceptere
- den obligatoriske
client.release()
instruktion - før du får adgang til argumentet.
- dit omfang/lukningsklient i dine tilbagekald.
Så , fra pg.client-dokumentationen *:
Almindelig tekstforespørgsel med et løfte
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())
forekommer mig den klareste syntaks:
- du afslutter klienten uanset resultaterne.
- du får adgang til resultatet før slut klienten.
- du begrænser/lukker ikke klienten i dine tilbagekald
Det er denne slags modsætning mellem de to syntakser, der kan være forvirrende ved første øjekast, men der er ingen magi deri, det er implementeringskonstruktionssyntaks. Fokuser på din tilbagekald og forespørgsler, ikke på disse konstruktioner, bare tag det mest elegante for dine øjne og tilfør det med din kode.
*Jeg tilføjede kommentarerne // din xxx her for klarhedens skyld