[英]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.