簡體   English   中英

MongoDB 在 nodejs 中連接 ECONNREFUSED 超時

[英]MongoDB connect ECONNREFUSED timeout in nodejs

我正在嘗試在我的網絡應用程序的 nodejs 后端上工作,它只處理 express.js API 請求並處理我的 mongodb 數據庫訪問,但是在最近全職切換到 linux 之后,我似乎無法從我的代碼連接到數據庫:

/home/Vawlpe/repos/vawlpe.github.io/server/node_modules/mongodb/src/sdam/topology.ts:606
        const timeoutError = new MongoServerSelectionError(
                             ^
MongoServerSelectionError: connect ECONNREFUSED ::1:27017
    at Timeout._onTimeout (/home/Vawlpe/repos/vawlpe.github.io/server/node_modules/mongodb/src/sdam/topology.ts:606:30)
    at listOnTimeout (node:internal/timers:559:17)
    at processTimers (node:internal/timers:502:7) {
  reason: TopologyDescription {
    type: 'Unknown',
    servers: Map(1) { 'localhost:27017' => [ServerDescription] },
    stale: false,
    compatible: true,
    heartbeatFrequencyMS: 10000,
    localThresholdMS: 15,
    logicalSessionTimeoutMinutes: undefined
  },
  code: undefined,
  [Symbol(errorLabels)]: Set(0) {}
}

我確保 mongodb 在正確的端口上運行,我沒有配置任何防火牆,我可以使用mongosh連接到它就好了,但是 JS API 似乎有問題,任何線索我可能會丟失什么? 代碼:

  //--------DB----------
  const db_port : number = 27017;
  const db_connnect_string : string = `mongodb://localhost:${db_port}`;
  const db : MongoClient = new MongoClient(db_connnect_string);

  console.log(`Connecting to DB @ ${db_connnect_string}...`);

  db.connect().catch((err) => {
    if (err) throw err;
  }).then(() => {
    console.log(`Successfully Connected to DB @ \x1b[34m${db_connnect_string}\x1b[0m`);
  })

nmap -p- localhost output:

$ nmap -p- localhost
Starting Nmap 7.92 ( https://nmap.org ) at 2022-05-26 13:21 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00020s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 65532 closed tcp ports (conn-refused)
PORT      STATE SERVICE
3000/tcp  open  ppp
6463/tcp  open  unknown
27017/tcp open  mongod

Nmap done: 1 IP address (1 host up) scanned in 1.20 seconds

我覺得這可能與 nodejs 將 localhost 解析為::1而不是127.0.0.1有關,但兩者應該指向同一件事,所以我看不到問題。

編輯:是的,將連接字符串從localhost更改為127.0.0.1確實解決了這個問題,我想我應該編輯/etc/hosts並查看我的::1映射有什么問題

編輯 2:原來 ::1 是 ipv6 環回地址,相當於 ipv4 的 127.0.0.1,我在 ipv4 上運行 mongod,但是 mongodb js api 或者 nodejs 本身似乎更喜歡通過 ipv6 解析本地主機,研究如何修復因為我不想在我的代碼中寫127.0.0.1而不是localhost哈哈

結果證明最簡單的解決方案就是在 ipv6 上運行 mongod,所以我只是編輯/etc/mongodb.conf如下:

# network interfaces
net:
  ipv6: true
  port: 27017
  bindIp: ::1

暫無
暫無

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

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