簡體   English   中英

節點服務器無法連接到 postgres 數據庫

[英]node server can't connect to postgres db

我最近從 MySQL 切換到 postgres 作為 node.js 項目的數據庫。 雖然我可以從我的本地 pgAdmin III (OSX) 客戶端訪問我的遠程 postgres 數據庫,但到目前為止我無法通過 node.js 連接到我的數據庫。我確定我為 pgAdmin 和我的 node.js 輸入的憑據完全一樣。 我嘗試過的另一件事是在我的數據庫服務器的 pg_hba.conf 中將我的本地 ipadress 設置為信任而不是 md5。 我做錯了什么嗎? 我最喜歡的搜索引擎發現了一些關於重置本地操作系統的令人擔憂的結果。 我剛剛使用了 node-postgres 的 github 回購文檔中的示例:

var pg = require('pg');

var conString = "postgres://myusername:mypassword@hostname: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' }

幫助將不勝感激

看來node-postgres不接受密碼中的主題標簽。 刪除主題標簽后,我可以毫無問題地進行連接。 不會想到這一點,自從 pgAdmin 接受它以來,它並沒有給我帶來問題。

最好的解決方案是使用encodeURIComponent對您的密碼字符串進行編碼。 這將允許在 URL 中使用主題標簽。

我使用的 node.js 中的接口可以在這里找到https://github.com/brianc/node-postgres

var pg = require('pg');
var conString = "postgres://YourUserName:YourPassword@localhost:5432/YourDatabase";

嘗試將 pg:// 更改為 postgres://

這是從另一篇 stackoverflow 文章中摘取的: How to make connection to Postgres via Node.js

我設法通過從 docker swarm 中的 env_file 中刪除雙引號和單引號來解決這個問題,在這種情況下,與 docker compose 不同,docker swarm 解釋在 envs 中“=”之后寫入的所有內容,例如,替換這個:

ENV='production'

為了這:

ENV=production

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM