2016-08-04 71 views
0

我已经在一个月前开始使用NodeJS。由于我没有那么多经验,所以运行代码并不总是像想要的那样。在某些方面,我无法通过节点的pg包连接到我的PostgreSQL。 (当我通过PDO在PHP连接好知道它的工作原理)从NodeJS连接到PostgreSQL不起作用

我做这个(简单的)路线/控制器

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文件夹我有一个包含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 
});