Aquí hay un ejemplo que usé para conectar node.js a mi base de datos Postgres.
La interfaz en node.js que utilicé se puede encontrar aquí https://github.com/brianc/node-postgres
var pg = require('pg');
var conString = "postgres://YourUserName:YourPassword@localhost:5432/YourDatabase";
var client = new pg.Client(conString);
client.connect();
//queries are queued and executed one after another once the connection becomes available
var x = 1000;
while (x > 0) {
client.query("INSERT INTO junk(name, a_number) values('Ted',12)");
client.query("INSERT INTO junk(name, a_number) values($1, $2)", ['John', x]);
x = x - 1;
}
var query = client.query("SELECT * FROM junk");
//fired after last row is emitted
query.on('row', function(row) {
console.log(row);
});
query.on('end', function() {
client.end();
});
//queries can be executed either via text/parameter values passed as individual arguments
//or by passing an options object containing text, (optional) parameter values, and (optional) query name
client.query({
name: 'insert beatle',
text: "INSERT INTO beatles(name, height, birthday) values($1, $2, $3)",
values: ['George', 70, new Date(1946, 02, 14)]
});
//subsequent queries with the same name will be executed without re-parsing the query plan by postgres
client.query({
name: 'insert beatle',
values: ['Paul', 63, new Date(1945, 04, 03)]
});
var query = client.query("SELECT * FROM beatles WHERE name = $1", ['john']);
//can stream row results back 1 at a time
query.on('row', function(row) {
console.log(row);
console.log("Beatle name: %s", row.name); //Beatle name: John
console.log("Beatle birth year: %d", row.birthday.getYear()); //dates are returned as javascript dates
console.log("Beatle height: %d' %d\"", Math.floor(row.height / 12), row.height % 12); //integers are returned as javascript ints
});
//fired after last row is emitted
query.on('end', function() {
client.end();
});
ACTUALIZACIÓN: - LA query.on
función ahora está en desuso y, por lo tanto, el código anterior no funcionará según lo previsto. Como solución para este vistazo a: - query.on no es una función
Un enfoque moderno y simple: pg-promise :
Vea también: Cómo declarar correctamente su módulo de base de datos .
fuente
Solo para agregar una opción diferente: uso Node-DBI para conectarme a PG, pero también debido a la capacidad de hablar con MySQL y sqlite. Node-DBI también incluye la funcionalidad para construir una declaración de selección, que es útil para hacer cosas dinámicas sobre la marcha.
Muestra rápida (utilizando información de configuración almacenada en otro archivo):
config.js:
fuente
Una solución puede ser el uso
pool
de clientes como el siguiente:Puede ver más detalles sobre este recurso .
fuente
Slonik es una alternativa a las respuestas propuestas por Kuberchaun y Vitaly.
Slonik implementa un manejo de conexión seguro ; crea un grupo de conexión y la apertura / manejo de la conexión se maneja por usted.
postgres://user:password@host:port/database
es su cadena de conexión (o más canónicamente, un URI o DSN de conexión).El beneficio de este enfoque es que su script asegura que nunca deje accidentalmente conexiones colgantes.
Otros beneficios por usar Slonik incluyen:
fuente
También podemos usar postgresql-easy . Está construido en node-postgres y sqlutil . Nota: pg_connection.js y your_handler.js están en la misma carpeta. db.js está en la carpeta de configuración colocada.
pg_connection.js
./config/db.js
your_handler.js
fuente