まず、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
})
})
このコード/構成は十分です /プールを機能させるために作成され、ここにあなたのものを提供します もの。アプリケーションをシャットダウンすると、接続は正常にハングします。プールは適切に作成されているため、手動でハングする方法が提供されていても、ハングしないようになっています。記事 。また、受け入れるには「常にクライアントを返す必要があります...」という前の赤いセクションも見てください。
- 必須の
client.release()
指示 - 議論にアクセスする前。
- コールバック内でクライアントをスコープ/閉鎖します。
次に 、pg.clientドキュメント から *:
約束のあるプレーンテキストクエリ
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())
私には最も明確な構文のようです:
- 結果がどうであれ、クライアントを終了します。
- 終了する前に結果にアクセスします クライアント。
- コールバック内でクライアントをスコープ/クロージャしない
一見混乱するかもしれないのは、2つの構文間のこの種の対立ですが、そこには魔法はなく、実装構築構文です。あなたのに焦点を当ててください。 これらの構成要素ではなく、コールバックとクエリは、あなたの目に最もエレガントなものを選び、あなたの目でそれを養う コード。
*コメントを追加しました//ここにあなたのxxx わかりやすくするために