2016-08-04 2 views
0

Я начал использовать NodeJS около месяца назад. Так как у меня не так много опыта, код работает не всегда так, как хотелось бы. В некотором роде я не могу подключиться к моему PostgreSQL с пакетом pg узла. (Хорошо знать, что это работает, когда я подключить через PDO в PHP)подключение к PostgreSQL из NodeJS не работает

Я сделал это (простой) маршрут/контроллер

var pg = require('pg'); 
var config = require('../config'); 

module.exports = function(app) { 

app.get('/db-get-formules', function(req, res) { 

    var results = []; 

    var pgClient = new pg.Client(config.getDbConnectionString()); 

    pgClient.connect(); 

    pgClient.query('SELECT * FROM formules ORDER BY formule_id'); 

    pgClient.on('row', function(row) { 
     results.push(row); 
    }) 

    pgClient.on('end', function() { 
     done(); 
     console.log(results); 
     res.json(results); 
    }) 

}); 

}; 

это мой index.js файл в конфигурации:

var configValues = require('./config'); 

module.exports = { 

getDbConnectionString: function() { 
    return 'postgres://' + configValues.uname + ':' + configValues.password + '@' + configValues.host + ':' + configValues.port + '/' + configValues.database; 
} 

}

в той же папке конфигурации У меня есть config.json файл, содержащий все параметры для подключения

{ 
    "uname": "username", 
    "database": "myDb", 
    "host": "localhost", 
    "password": "[email protected]", 
    "port": "5432", 
    "idleTimeoutMillis": "30000" 
} 

Если я запустил эту страницу /db-get-formules, страница продолжает загружаться (вращается), и ничего действительно не происходит. Что я делаю не так?

Ну и просто, чтобы предоставить вам мой полный код, у меня есть server.js файл в корневом каталоге

var express = require('express'); 
var app = express(); 
var queryFormules = require('./controllers/queryFormules'); 

var port = process.env.PORT || 3000; 

app.use('/app', express.static(__dirname + '/public/app')); 
app.use('/server', express.static(__dirname + '/public/server')); 

queryFormules(app); 

// application ------------------------------------------------------------- 
app.get('/', function(req, res) { 
    res.sendFile(__dirname + '/public/index.html'); // load the single view file (angular will handle the page changes on the front-end) 
}); 

app.listen(port); 

ответ

0

Я не вижу никаких других ответов, и я не уверен, если это поможет, но вот как я получил его на работу:

config.js

var pg = require('pg'); 
exports.conString = "pg://user:[email protected]_address:5432/db_name"; 

helper.js

var pg = require("pg"); 
var config = require('../config/config'); 

exports.runQuery= function(query, next) { 
    pg.connect(config.conString, function(err, client) { 
     if (err) { 
      var e = { 
       error: true, 
       message: "Unable to connect to database", 
       err: err, 
      }; 
      return next(e); 
     } 

     client.query(query, function(err, result) { 
      //deal with the result 
      client.end(); 
      return next(some_data_or_value); 
     }); 
    }); 
} 

Тогда вы можете позвонить runQuery из любого места, конечно вам придется иметь дело с результатами/возможные ошибки в функции, а также.

другой файл или функция

var helpers = require('../services/helpers'); 

var query = "SELECT * FROM formules ORDER BY formule_id" 
helpers.runQuery(query, function(result) { 
    //deal with results 
}); 
Смежные вопросы