超时错误 - MongoServerSelectionError:连接 ECONNREFUSED ::1:27017 - [NodeJS + MongoDB]

Jah*_* E. 4 mongodb node.js express mongo-shell

免责声明:类似的主题没有为我的问题提供有效的解决方案!

  • 重启MongoDB服务器(发生错误时仍保持运行)
  • 在 Windows 上使用 MongoDB 服务器作为服务(手动启动)
  • 通过 MongoDB Shell CLI 包建立连接,在命令提示符下按 Enter 键建立默认连接 ( 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
  }
}
Run Code Online (Sandbox Code Playgroud)

我的依赖项:

 "dependencies": {
    "ejs": "^3.1.6",
    "express": "^4.17.1",
    "mongodb": "^4.0.1"
  },
  "devDependencies": {
    "nodemon": "^2.0.7"
  }
Run Code Online (Sandbox Code Playgroud)

仅供参考: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,
};
Run Code Online (Sandbox Code Playgroud)

这是我的 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);
});
Run Code Online (Sandbox Code Playgroud)

Jah*_* E. 23

正如 @prasad_ 指出的,它可以帮助您在文件中更改localhost为127.0.0.1, ,在该文件中建立与 MongoDB 服务器的连接。虽然它们应该被视为同义词,并且我能够排除一般问题(您可以在类似问题中找到答案),但这可能只是 chrome 的缓存问题,就像这里一样。


小智 9

就我而言,我替换了主机名

本地主机

到

127.0.0.1

尝试更改自

async function connectToDatabase(){
const client = await MongoClient.connect('mongodb://localhost:27017');
 database = client.db('file-demo');
}
Run Code Online (Sandbox Code Playgroud)

到

async function connectToDatabase() {
 const client = await MongoClient.connect('mongodb://127.0.0.1:27017');
 database = client.db('file-demo');
}
Run Code Online (Sandbox Code Playgroud)