【问题标题】:connecting to PostgreSQL from NodeJS not working从 NodeJS 连接到 PostgreSQL 不起作用
【发布时间】:2016-08-08 02:51:35
【问题描述】:

我大约一个月前开始使用 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);

【问题讨论】:

    标签: node.js postgresql


    【解决方案1】:

    我没有看到任何其他答案,我不确定这是否会有所帮助,但这是我如何让它发挥作用的:

    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
    });
    

    【讨论】:

      猜你喜欢
      • 2020-11-21
      • 2016-07-01
      • 2023-03-03
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多