我想使用node-posgres将我的应用nodejs连接到PostgreSQL。 我在localhost(ubuntu)中的应用程序和我在操作系统OpenSuse的云中的虚拟机中的postgresql。 这是我的代码:
var express = require('express');
var app = express();
var http = require('http');
var pg = require('pg');
var conString = "postgres://postgres:mypassword@myurl.com:5432/postgres";
app.get('/', function (req, res) {
res.send('HOLAAAA');
});
// respond with "SERVER" on the homepage
app.get('/server', function (req, res) {
var client = new pg.Client(conString);
client.connect(function (err) {
if (err) {
return console.error('could not connect to postgres', err);
}
console.log('CONNECT PASSED');
client.query('SELECT * FROM visit', function (err, result) {
if (err) {
return console.error('error running query', err);
}
console.log('QUERY PASSED');
console.log(result.rows[0].theTime);
//output: Tue Jan 15 2013 19:12:47 GMT-600 (CST)
client.end();
});
});
});
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
但是我得到了这样的错误:
could not connect to postgres { [Error: connect ECONNREFUSED]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect' }
请帮我解决这个问题。 谢谢!
答案 0 :(得分:1)
首先从本地端尝试一个简单的psql命令,
psql -d DBNAME -h YOUR_IP -U USERNAME
它可能不适合你。这可能是由于两个原因,本地站无法解决VM的IP问题。 (或)是公共云中的虚拟机,如亚马逊(或)您的桌面。如果它在公共组中,则VM上的端口5432不对公共世界开放。您需要编写一个安全组来执行此操作。
如果您确定,这不是上述两个问题中的任何一个,请访问postgres /etc/postgresql/9.3/main/pg_hba.conf
并查看是否启用了远程连接。 NodeJs app,你必须在最后测试。
答案 1 :(得分:1)
@Madhavan Kumar非常感谢你的帮助
解决此问题的步骤如下:
在远程服务器上: -
1- find \ -name "postgresql.conf"
找到配置文件的位置
2- sudo nano /path/to/config/postgresql.conf
编辑配置文件
3-将此#listen_addresses = 'localhost'
更改为此listen_addresses = '*'
,然后保存并退出
4- find \ -name "pg_hba.conf"
查找hba配置文件
5- sudo nano /path/to/config/pg_hba.conf
编辑hba配置文件
6-加
host all all 0.0.0.0/0 md5
host all all ::/0 md5
在文件末尾,然后保存并退出
7-运行/etc/init.d/postgresql restart
重启postgres
在代码中连接如下: -
let sequelize = new Sequelize(
config.db.name,
config.db.username,
config.db.password,
{
host: config.ip,
port: config.port,
dialect : 'postgres'
}
)