![](/img/trans.png)
[英]MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017
[英]MongooseServerSelectionError: connect ECONNREFUSED ::1:27017
當我嘗試使用 Mongoose 將我的應用程序與我的數據庫連接時出現問題。已經嘗試了以下我在谷歌上找到的解決方案:
但我無法解決它。 誰能幫我?
//my connection
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/notes-db-app',{
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(db => console.log('DB is connected'))
.catch(err => console.log(err));
拋出我,這個錯誤
MongooseServerSelectionError:連接 ECONNREFUSED::1:27017 在 NativeConnection.Connection.openUri (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\connection.js:797:32) 在 C:\Users \ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\index.js:330:10 在 C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\helpers\promiseOrCallback。 js:32:5 在新的 Promise () 在 promiseOrCallback (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\helpers\promiseOrCallback.js:31:10) 在 Mongoose._promiseOrCallback (C :\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\index.js:1151:10) 在 Mongoose.connect (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\ mongoose\lib\index.js:329:20) 在 Object。 (C:\Users\ivan\Desktop\NodeJS\notes-app\src\db.js:3:10)
在 Module._compile (node:internal/modules/cjs/loader:1095:14) 在 Object.Module._extensions..js (node:internal/modules/cjs/loader:1147:10) {
原因:TopologyDescription { type: 'Unknown', servers: Map(1) { 'localhost:27017' => [ServerDescription] }, stale: false, compatible: true, heartbeatFrequencyMS: 10000, localThresholdMS: 15, logicalSessionTimeoutMinutes: undefined } }
我嘗試像這樣將端口放在我的連接代碼上
//my connection
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/notes-db-app',{
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(db => console.log('DB is connected'))
.catch(err => console.log(err));
它給我帶來了另一個錯誤
MongooseServerSelectionError:無效的消息大小:1347703880,最大允許:67108864 在 NativeConnection.Connection.openUri (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\connection.js:797:32) 在 C :\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\index.js:330:10 at C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\helpers \promiseOrCallback.js:32:5 在新的 Promise () 在 promiseOrCallback (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\helpers\promiseOrCallback.js:31:10) 在 Mongoose。 _promiseOrCallback (C:\Users\ivan\Desktop\NodeJS\notes-app\node_modules\mongoose\lib\index.js:1151:10) 在 Mongoose.connect (C:\Users\ivan\Desktop\NodeJS\notes-app \node_modules\mongoose\lib\index.js:329:20) 在 Object。 (C:\Users\ivan\Desktop\NodeJS\notes-app\src\db.js:3:10)
在 Module._compile (node:internal/modules/cjs/loader:1095:14) 在 Object.Module._extensions..js (node:internal/modules/cjs/loader:1147:10) {
原因:TopologyDescription { type: 'Unknown', servers: Map(1) { 'localhost:3000' => [ServerDescription] }, stale: false, compatible: true, heartbeatFrequencyMS: 10000, localThresholdMS: 15, logicalSessionTimeoutMinutes: undefined } }
const uri = 'mongodb://localhost:27017/test';
const options = {
useNewUrlParser: true,
useUnifiedTopology: true,
serverSelectionTimeoutMS: 5000,
autoIndex: false, // Don't build indexes
maxPoolSize: 10, // Maintain up to 10 socket connections
serverSelectionTimeoutMS: 5000, // Keep trying to send operations for 5 seconds
socketTimeoutMS: 45000, // Close sockets after 45 seconds of inactivity
family: 4 // Use IPv4, skip trying IPv6
}
const connectWithDB = () => {
mongoose.connect(uri, options, (err, db) => {
if (err) console.error(err);
else console.log("database connection")
})
}
connectWithDB()
我終於解決了。
啟用 MongoDB 默認禁用的 IPV6。 在 CMD 上使用以下命令行:
mongod --ipv6
然后再試一次連接就可以了!
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/notes-db-app',{
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(db => console.log('DB is connected'))
.catch(err => console.log(err));
代表提問者發布
只需傳遞第三個參數family:4
即。
mongoose.connect('mongodb://localhost/notes-db-app',{
useNewUrlParser: true,
useUnifiedTopology: true,
family: 4,
})
如果錯誤狀態:
連接()錯誤:MongooseServerSelectionError:連接 ECONNREFUSED ::1:27017
然后在 IPv6 地址::1上拒絕與localhost的連接。 Mongoose 默認使用 IPv6 ..
為了快速檢查,您可以顯式設置 IPv4 地址:
mongoose.connect('mongodb://127.0.0.1/test')
可能您要連接的服務器的主機名/IP 設置不正確。
我習慣於將該錯誤視為:
MongooseServerSelectionError: connect ECONNREFUSED <hostname/hostIP>:<port>
在您發布的控制台日志中, <hostname/hostIP>
部分格式錯誤/丟失。
示例- 對於在端口27017上本地運行的 mongodb 服務器,這是服務器關閉時的錯誤:
MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017
如果您使用 mongodb URI 連接到數據庫,請確保它看起來像這樣
"mongodb://<hostname/hostIP>:<port>"
mongod
const mongoose=require("mongoose"); mongoose.connect('mongodb://localhost/notes-db-app',{ useNewUrlParser: true, useUnifiedTopology: true, family: 4, })
問題是, localhost
別名解析為 IPv6 地址::1
而不是127.0.0.1
但是, net.ipv6
默認為false
。
最好的選擇是使用以下配置啟動 MongoDB:
net:
ipv6: true
bindIpAll: true
或者
net:
ipv6: true
bindIp: localhost
然后所有變體都應該起作用:
C:\>mongosh "mongodb://localhost:27017" --quiet --eval "db.getMongo()"
mongodb://localhost:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.0
C:\>mongosh "mongodb://127.0.0.1:27017" --quiet --eval "db.getMongo()"
mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.0
C:\>mongosh "mongodb://[::1]:27017" --quiet --eval "db.getMongo()"
mongodb://[::1]:27017/?directConnection=true&appName=mongosh+1.6.0
如果您不將 MongoDB 作為服務運行,那么它將是
mongod --bind_ip_all --ipv6 <other options>
注意,我不喜歡配置
net:
bindIp: <ip_address>
在我看來,這只在具有多個網絡接口的計算機上才有意義。 使用bindIp: localhost
如果你需要阻止來自遠程計算機的任何連接(例如,在維護時或用作 Web 服務的后端數據庫時),否則使用bindIpAll: true
在代碼的開頭使用它:
const dns = require('dns');
// Set default result order for DNS resolution
dns.setDefaultResultOrder('ipv4first');
MongoDB 是否在 PORT 27017 上運行? 確保它在指定的端口上運行。 看看它是否能解決你的問題。 還要檢查您的憑據:Mongo 用戶名和密碼。
如果您發布了數據庫連接的源代碼,那會更有幫助。
我也遇到了同樣的問題,這些命令對我有用(Ubuntu 機器)
sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chown mongodb:mongodb /tmp/mongodb-27017.sock
然后
sudo service mongod restart
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.