How to make connection to Postgres via Node.js
Here is an example I used to connect node.js to my Postgres database.
The interface in node.js that I used can be found here 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 availablevar 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 emittedquery.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 nameclient.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 postgresclient.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 timequery.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 emittedquery.on('end', function() { client.end();});
UPDATE:- THE query.on
function is now deprecated and hence the above code will not work as intended. As a solution for this look at:- query.on is not a function
A modern and simple approach: pg-promise:
const pgp = require('pg-promise')(/* initialization options */);const cn = { host: 'localhost', // server name or IP address; port: 5432, database: 'myDatabase', user: 'myUser', password: 'myPassword'};// alternative:// var cn = 'postgres://username:password@host:port/database';const db = pgp(cn); // database instance;// select and return a single user name from id:db.one('SELECT name FROM users WHERE id = $1', [123]) .then(user => { console.log(user.name); // print user name; }) .catch(error => { console.log(error); // print the error; });// alternative - new ES7 syntax with 'await':// await db.one('SELECT name FROM users WHERE id = $1', [123]);
Just to add a different option - I use Node-DBI to connect to PG, but also due to the ability to talk to MySQL and sqlite. Node-DBI also includes functionality to build a select statement, which is handy for doing dynamic stuff on the fly.
Quick sample (using config information stored in another file):
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;