node.js - 超时错误 - MongoServerSelectionError:连接 ECON

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

  • 重启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 的缓存问题,如 here .

关于node.js - 超时错误 - MongoServerSelectionError:连接 ECONNREFUSED::1:27017 - [NodeJS + MongoDB],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70045495/

相关文章:

android - 我正在尝试使用安全参数,但是当我将依赖项添加到项目级别 build.gradle

haskell - 我可以说 Monad 使将某些类型视为同构成为可能吗?

asp.net - 在 .net 中,是否有与 Server.HTMLEncode() 相反的函数?

r - 如何提取R中的第一个字符串

perl - 为什么 Scalar::Util::Numeric 安装不正确?

python - 对具有更高优先级正数的绝对值的整数列表进行排序

r - 提取特定格式的部分字符串

ruby - Rails 将数组合并为数组的数组

ios - 通过 FaSTLane "the server responded with statu

python - Julia 代码没有完成而 Python 代码完成了