2014-02-12 122 views
6

我最近從MySQL切換到postgres作爲node.js項目的數據庫。儘管我能夠從我的本地pgAdmin III(OSX)客戶端訪問我的遠程postgres數據庫,但到目前爲止,我一直無法通過node.js連接到我的數據庫。我確信我爲pgAdmin和我的node.js輸入的憑證完全一樣。我試過的另一件事是將我的本地ipadress設置爲信任我的數據庫服務器的pg_hba.conf中的md5。有什麼我做錯了嗎?我最喜歡的搜索引擎提出了一些關於重置我的本地操作系統的令人擔憂的命中。我只是用例如,從節點的Postgres的GitHub庫DOC:節點服務器無法連接到postgres db

var pg = require('pg'); 

var conString = "postgres://myusername:[email protected]:5432/dbname"; 

var client = new pg.Client(conString); 
client.connect(function(err) { 
    if(err) { 
    return console.error('could not connect to postgres', err); 
    } 
    client.query('SELECT NOW() AS "theTime"', function(err, result) { 
    if(err) { 
     return console.error('error running query', err); 
    } 
    console.log(result.rows[0].theTime); 
    client.end(); 
    }); 
}); 

而且這些都是錯誤的,我得到每次我嘗試啓動我的服務器時間:

could not connect to postgres { [Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo' } 

幫助將不勝感激

+1

嗯,一個'host hostname'從那個服務器上的命令行得到了什麼?這是它的一個知識產權,它聽取了嗎?這個錯誤似乎是主機不知道它應該是你認爲它應該被稱爲的「主機名」......在旁註:我只看到了帶'postgres://'的例子,而不是'pg://' ,我不知道這是否重要... – Wrikken

+0

感謝您的回覆Wrikken。數據庫服務器的輸出是:'主機主機名未找到:3(NXDOMAIN)'。數據庫服務器是一個VPS。我想這應該不重要。 – Dani

+1

那麼,我的意思是:你輸入的主機名是...而不是服務器主機名?它告訴你它不能把名字翻譯成IP,所以失敗了。所以,也許輸入正確的一個(或者如果你知道它是與代碼運行在同一個服務器上的'localhost',就像下面的答案中提到的那樣)。如果這也失敗了:嘗試給出正確的_IP_地址。 – Wrikken

回答

21

看來node-postgres不接受您的密碼哈希標籤。刪除哈希標籤後,我能夠連接而沒有問題。不會有這個想法,並且自從pgAdmin接受它以來它並沒有成爲一個問題。

+1

Doh!很高興知道它已經解決了。 – Wrikken

+5

非常感謝。只是在執行encodeURIComponent('passwordwith#')修復了這個問題。 – Zaptree

+1

謝謝 - 無法想象通過調試發現此問題,可能會放棄! –

相關問題