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.