从NodeJS连接到PostgreSQL无法正常工作

时间:2016-08-04 11:47:46

标签: node.js postgresql

我大约一个月前开始使用NodeJS。由于我没有那么多运行代码的经验并不总是如愿。在某种程度上,我无法使用节点的pg包连接到我的PostgreSQL。 (很高兴知道当我通过PHP中的PDO连接时它可以工作)

我制作了这个(简单)路线/控制器

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": "P@ssw0rd",
  "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);

1 个答案:

答案 0 :(得分:0)

我没有看到任何其他答案,我不确定这是否会有所帮助,但以下是我如何使用它:

<强> config.js

var pg = require('pg');
exports.conString = "pg://user:password@db_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
});