130 votes

Jouez avec Postgres via Node.js

Je me trouve en train de créer une base de données postgres. J'ai donc installé postgres et démarré un serveur avec initdb /usr/local/pgsql/data , puis j'ai démarré cette instance avec postgres -D /usr/local/pgsql/data Comment puis-je interagir avec ce noeud? Par exemple, quel serait le connectionstring , ou comment puis-je savoir ce que c'est.

324voto

Bob Points 9217

Voici un exemple de connexion de node.js à ma base de données Postgres.

L’interface dans node.js que j’ai utilisée peut être trouvée ici 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();
});
 

38voto

guettli Points 3284

Je n'ai jamais utilisé node.js, mais mon moteur de recherche favori m'a dit: https://github.com/brianc/node-postgres

13voto

mlaccetti Points 382

Pour ajouter une option différente, j’utilise Node-DBI pour me connecter à PG, mais aussi parce que j’ai la possibilité de parler à MySQL et à sqlite. Node-DBI inclut également des fonctionnalités permettant de créer une instruction select, ce qui est pratique pour effectuer des tâches dynamiques à la volée.

Exemple rapide (utilisant les informations de configuration stockées dans un autre fichier):

 var DBWrapper = require('node-dbi').DBWrapper;
var config = require('./config');

var dbConnectionConfig = { host:config.db.host, user:config.db.username, password:config.db.password, database:config.db.database };
var dbWrapper = new DBWrapper('pg', dbConnectionConfig);
dbWrapper.connect();
dbWrapper.fetchAll(sql_query, null, function (err, result) {
  if (!err) {
    console.log("Data came back from the DB.");
  } else {
    console.log("DB returned an error: %s", err);
  }

  dbWrapper.close(function (close_err) {
    if (close_err) {
      console.log("Error while disconnecting: %s", close_err);
    }
  });
});
 

config.js:

 var config = {
  db:{
    host:"plop",
    database:"musicbrainz",
    username:"musicbrainz",
    password:"musicbrainz"
  },
}
module.exports = config;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X