javascript pg-promise

javascript - ¿Dónde debo inicializar pg-promise



(2)

Acabo de empezar a aprender nodejs-postgres y encontré el paquete pg-promise . Leí los documentos y ejemplos, pero no entiendo dónde debo poner el código de inicialización. Utilizo Express y tengo muchas rutas.

¿Tengo que poner toda la inicialización (incluido pg-monitor init) en cada archivo en el que me gustaría consultar el db o necesito incluirlos e initalize/configure solo en el server.js?

Si los inicialicé solo en el server.js, ¿qué debo incluir en otros archivos donde necesito una consulta db?

En otras palabras. ¿No me queda claro si pg-promise y pg-monitor configuration/initalization fue una acción global o local?

¿Tampoco está claro si necesito crear una variable db y finalizar pgp para cada consulta?

var db = pgp(connection); db.query(...).then(...).catch(...).finally(**pgp.end**);


Debe inicializar la conexión de la base de datos solo una vez. Si se va a compartir entre módulos, póngalo en su propio archivo de módulo, de esta manera:

const initOptions = { // initialization options; }; const pgp = require(''pg-promise'')(initOptions); const cn = ''postgres://username:password@host:port/database''; const db = pgp(cn); module.exports = { pgp, db };

Consulte las Opciones de inicialización compatibles.

ACTUALIZACIONES

Y si intenta crear más de un objeto de base de datos con los mismos detalles de conexión, la biblioteca mostrará una advertencia en la consola:

WARNING: Creating a duplicate database object for the same connection. at Object.<anonymous> (D:/NodeJS/tests/test2.js:14:6)

Esto indica que el patrón de uso de la base de datos es malo, es decir, debe compartir el objeto de la base de datos, como se muestra arriba, no volver a crearlo de nuevo. Y desde la versión 6.x se volvió crítica, con cada objeto de la base de datos manteniendo su propio grupo de conexiones, por lo que duplicarlos también resultará en un uso deficiente de la conexión.

Además, no es necesario exportar pgp - instancia de biblioteca inicializada. En cambio, solo puedes hacer:

module.exports = db;

Y si en algún módulo necesita usar la raíz de la biblioteca, puede acceder a ella a través de la propiedad $config :

const db = require(''../db''); // your db module const pgp = db.$config.pgp; // the library''s root after initialization


Una "conexión" en pgp es en realidad un grupo autogestionado de múltiples conexiones. Cada vez que realice una solicitud, se tomará una conexión del grupo, se abrirá, se usará, luego se cerrará y se devolverá al grupo. Esa es una gran parte de por qué vitaly-t es tan importante para crear solo una instancia de pgp para toda su aplicación. La única razón para finalizar su conexión es si definitivamente ha terminado de usar la base de datos, es decir, está cerrando su aplicación con gracia.