timeoutError - MongoServerSelectionError: connect ECONNREFUSED ::1:27017 - [NodeJS + MongoDB]
timeoutError - MongoServerSelectionError: connect ECONNREFUSED ::1:27017 - [NodeJS + MongoDB]
免责声明:类似的主题没有为我的问题提供有效的解决方案!
- 重新启动MongoDB服务器(发生错误时保持运行)
- 使用 windows 上的 MongoDB 服务器作为服务(手动启动)
- 通过 MongoDB Shell CLI 包建立连接,方法是在命令提示符下按回车键建立默认连接(
mongodb://127.0.0.1:27017/directConnection=true&serverSelectionTimeoutMS=2000
)
- 调用了 npm install 和 npm start(我的依赖项在下面列出)
- 检查 MongoDB 是 运行
- 通过windows资源监控查到27017端口被mongod.exe使用TCP占用,不受防火墙限制
- 已确认我没有使用 VPN 或可能会干扰的代理连接。
- 然后我打开了我正在听的
http://localhost:3000/
(app.listen(3000);
)
但是,我仍然得到以下错误:
const timeoutError = new error_1.MongoServerSelectionError(`Server selection timed out after ${serverSelectionTimeoutMS} ms`, this.description); ^
MongoServerSelectionError: connect ECONNREFUSED ::1:27017
at Timeout._onTimeout (\node_modules\mongodb\lib\sdam\topology.js:330:38)
at listOnTimeout (node:internal/timers:557:17)
at processTimers (node:internal/timers:500:7) {
reason: TopologyDescription {
type: 'Unknown',
servers: Map(1) {
'localhost:27017' => ServerDescription {
_hostAddress: HostAddress { isIPv6: false, host: 'localhost', port: 27017 },
address: 'localhost:27017',
type: 'Unknown',
hosts: [],
passives: [],
arbiters: [],
tags: {},
maxWireVersion: 0,
roundTripTime: -1,
lastUpdateTime: 536295834,
lastWriteDate: 0,
error: MongoNetworkError: connect ECONNREFUSED ::1:27017
at connectionFailureError (\node_modules\mongodb\lib\cmap\connect.js:293:20)
at Socket.<anonymous> (\node_modules\mongodb\lib\cmap\connect.js:267:22)
at Object.onceWrapper (node:events:510:26)
at Socket.emit (node:events:390:28)
at emitErrorNT (node:internal/streams/destroy:164:8)
at emitErrorCloseNT (node:internal/streams/destroy:129:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21)
}
},
stale: false,
compatible: true,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
logicalSessionTimeoutMinutes: undefined
}
}
我的依赖项:
"dependencies": {
"ejs": "^3.1.6",
"express": "^4.17.1",
"mongodb": "^4.0.1"
},
"devDependencies": {
"nodemon": "^2.0.7"
}
仅供参考:Node.js v17.0.1
更新:
这是我的 database.js 文件
const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;
let database;
async function connectToDatabase() {
const client = await MongoClient.connect('mongodb://localhost:27017');
database = client.db('file-demo');
}
function getDb() {
if (!database) {
throw { message: 'Database not connected!' };
}
return database;
}
module.exports = {
connectToDatabase: connectToDatabase,
getDb: getDb,
};
这是我的app.js:
const path = require('path');
const express = require('express');
const userRoutes = require('./routes/users');
const db = require('./data/database');
const app = express();
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
app.use(express.urlencoded({ extended: false }));
app.use(express.static('public'));
app.use(userRoutes);
db.connectToDatabase().then(function () {
app.listen(3000);
});
正如@prasad_ 指出的那样,将文件中的 localhost
更改为 127.0.0.1
会有所帮助,您将在其中建立与 MongoDB 服务器的连接。
尽管它们应该被视为同义词,并且因为我能够排除一般问题(您可以在类似问题中找到答案),但这可能只是 chrome 的缓存问题,例如 .
对我来说,问题是我在安装 mongodb 服务后没有 运行ning它。
在 mac,运行:
brew services start mongodb-community@5.0
免责声明:类似的主题没有为我的问题提供有效的解决方案!
- 重新启动MongoDB服务器(发生错误时保持运行)
- 使用 windows 上的 MongoDB 服务器作为服务(手动启动)
- 通过 MongoDB Shell CLI 包建立连接,方法是在命令提示符下按回车键建立默认连接(
mongodb://127.0.0.1:27017/directConnection=true&serverSelectionTimeoutMS=2000
) - 调用了 npm install 和 npm start(我的依赖项在下面列出)
- 检查 MongoDB 是 运行
- 通过windows资源监控查到27017端口被mongod.exe使用TCP占用,不受防火墙限制
- 已确认我没有使用 VPN 或可能会干扰的代理连接。
- 然后我打开了我正在听的
http://localhost:3000/
(app.listen(3000);
)
但是,我仍然得到以下错误:
const timeoutError = new error_1.MongoServerSelectionError(`Server selection timed out after ${serverSelectionTimeoutMS} ms`, this.description); ^
MongoServerSelectionError: connect ECONNREFUSED ::1:27017
at Timeout._onTimeout (\node_modules\mongodb\lib\sdam\topology.js:330:38)
at listOnTimeout (node:internal/timers:557:17)
at processTimers (node:internal/timers:500:7) {
reason: TopologyDescription {
type: 'Unknown',
servers: Map(1) {
'localhost:27017' => ServerDescription {
_hostAddress: HostAddress { isIPv6: false, host: 'localhost', port: 27017 },
address: 'localhost:27017',
type: 'Unknown',
hosts: [],
passives: [],
arbiters: [],
tags: {},
maxWireVersion: 0,
roundTripTime: -1,
lastUpdateTime: 536295834,
lastWriteDate: 0,
error: MongoNetworkError: connect ECONNREFUSED ::1:27017
at connectionFailureError (\node_modules\mongodb\lib\cmap\connect.js:293:20)
at Socket.<anonymous> (\node_modules\mongodb\lib\cmap\connect.js:267:22)
at Object.onceWrapper (node:events:510:26)
at Socket.emit (node:events:390:28)
at emitErrorNT (node:internal/streams/destroy:164:8)
at emitErrorCloseNT (node:internal/streams/destroy:129:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21)
}
},
stale: false,
compatible: true,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
logicalSessionTimeoutMinutes: undefined
}
}
我的依赖项:
"dependencies": {
"ejs": "^3.1.6",
"express": "^4.17.1",
"mongodb": "^4.0.1"
},
"devDependencies": {
"nodemon": "^2.0.7"
}
仅供参考:Node.js v17.0.1
更新: 这是我的 database.js 文件
const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;
let database;
async function connectToDatabase() {
const client = await MongoClient.connect('mongodb://localhost:27017');
database = client.db('file-demo');
}
function getDb() {
if (!database) {
throw { message: 'Database not connected!' };
}
return database;
}
module.exports = {
connectToDatabase: connectToDatabase,
getDb: getDb,
};
这是我的app.js:
const path = require('path');
const express = require('express');
const userRoutes = require('./routes/users');
const db = require('./data/database');
const app = express();
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
app.use(express.urlencoded({ extended: false }));
app.use(express.static('public'));
app.use(userRoutes);
db.connectToDatabase().then(function () {
app.listen(3000);
});
正如@prasad_ 指出的那样,将文件中的 localhost
更改为 127.0.0.1
会有所帮助,您将在其中建立与 MongoDB 服务器的连接。
尽管它们应该被视为同义词,并且因为我能够排除一般问题(您可以在类似问题中找到答案),但这可能只是 chrome 的缓存问题,例如
对我来说,问题是我在安装 mongodb 服务后没有 运行ning它。
在 mac,运行:
brew services start mongodb-community@5.0