Как подключиться к Postgres через Node.js

Я пытаюсь создать базу данных postgres, поэтому я установил postgres и запустил сервер с initdb /usr/local/pgsql/data, затем запустил этот экземпляр с postgres -D /usr/local/pgsql/data теперь, как я могу взаимодействовать с этим через узел? Например, что бы connectionstring или как я могу узнать, что это такое.

108 голосов | спросил Doboy 9 FebruaryEurope/MoscowbThu, 09 Feb 2012 08:37:50 +0400000000amThu, 09 Feb 2012 08:37:50 +040012 2012, 08:37:50

4 ответа


0

Вот пример, который я использовал для подключения node.js к моей базе данных Postgres.

Интерфейс в node.js, который я использовал, можно найти здесь https://github.com/brianc /узел-Postgres

var pg = require('pg');
var conString = "postgres://YourUserName:[email protected]: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();
});

ОБНОВЛЕНИЕ: - Функция query.on теперь устарела и, следовательно, приведенный выше код не будет работать должным образом. Для решения этой проблемы посмотрите: - query.on не является функцией

ответил Kuberchaun 9 FebruaryEurope/MoscowbThu, 09 Feb 2012 19:47:02 +0400000000pmThu, 09 Feb 2012 19:47:02 +040012 2012, 19:47:02
0

Простой подход: pg-обещание , если вы знакомы с обещаниями, которые ;)

var pgp = require('pg-promise')(/*options*/);

var cn = {
    host: 'localhost', // server name or IP address;
    port: 5432,
    database: 'myDatabase',
    user: 'myUser',
    password: 'myPassword'
};
// alternative:
// var cn = 'postgres://username:[email protected]:port/database';

var db = pgp(cn); // database instance;

// select and return 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;
    });

См. также: Как правильно объявить модуль базы данных .

ответил vitaly-t 10 MarpmTue, 10 Mar 2015 19:58:12 +03002015-03-10T19:58:12+03:0007 2015, 19:58:12
0

Просто чтобы добавить другой вариант - я использую Node-DBI для подключения к PG, но также благодаря возможности общаться с MySQL и sqlite. Node-DBI также включает в себя функциональность для создания оператора select, что удобно для динамических действий на лету.

Быстрый пример (с использованием информации конфигурации, хранящейся в другом файле):

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;
ответил mlaccetti 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 06 Sep 2012 20:24:44 +0400 2012, 20:24:44
0

Одним из решений может быть использование pool клиентов, подобных следующим:

const { Pool } = require('pg');
var config = {
    user: 'foo', 
    database: 'my_db', 
    password: 'secret', 
    host: 'localhost', 
    port: 5432, 
    max: 10, // max number of clients in the pool
    idleTimeoutMillis: 30000
};
const pool = new Pool(config);
pool.on('error', function (err, client) {
    console.error('idle client error', err.message, err.stack);
});
pool.query('SELECT $1::int AS number', ['2'], function(err, res) {
    if(err) {
        return console.error('error running query', err);
    }
    console.log('number:', res.rows[0].number);
});

Более подробную информацию можно найти в этом ресурсе .

ответил OmG 17 J0000006Europe/Moscow 2017, 10:52:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132