MongooseServerSelectionError:连接到副本集时连接 ECONNREFUSED ::1:27017

2024-04-28

我刚刚将 mongoose 和 MongoDB 升级到最新版本并转换了mongod实例到副本集(用于测试的单个节点),但现在当节点应用程序连接到它时,我得到MongooseServerSelectionError: connect ECONNREFUSED ::1:27017错误,但我不明白为什么type: 'ReplicaSetNoPrimary',当我通过 shell 连接到它时,提示符是rs0:PRIMARY>. Serching for this error I always see 消息:'连接ECONNREFUSED 127.0.0.1:27017',but looks like mongoose is trying to connect to::1:27017`。

你能看出我做错了什么或缺少设置吗?

更新: 我重新启动了机器,首先节点应用程序连接正常。然后,如果重新启动它,它开始无法连接。

rs
[nodemon] starting `node server.js`
App executing to port  3000
MongooseServerSelectionError: connect ECONNREFUSED ::1:27017

Error :

App executing to port  3000
MongooseServerSelectionError: connect ECONNREFUSED ::1:27017
    at NativeConnection.Connection.openUri (/Volumes/ProjectsSSD/FixitServer/fixit_server_node/node_modules/mongoose/lib/connection.js:797:32)
    at /Volumes/ProjectsSSD/FixitServer/fixit_server_node/node_modules/mongoose/lib/index.js:332:10
    at /Volumes/ProjectsSSD/FixitServer/fixit_server_node/node_modules/mongoose/lib/helpers/promiseOrCallback.js:32:5
    at new Promise (<anonymous>)
    at promiseOrCallback (/Volumes/ProjectsSSD/FixitServer/fixit_server_node/node_modules/mongoose/lib/helpers/promiseOrCallback.js:31:10)
    at Mongoose._promiseOrCallback (/Volumes/ProjectsSSD/FixitServer/fixit_server_node/node_modules/mongoose/lib/index.js:1158:10)
    at Mongoose.connect (/Volumes/ProjectsSSD/FixitServer/fixit_server_node/node_modules/mongoose/lib/index.js:331:20)
    at Object.<anonymous> (/Volumes/ProjectsSSD/FixitServer/fixit_server_node/api/src/config/database.js:33:10)
    at Module._compile (node:internal/modules/cjs/loader:1097:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1149:10) {
  reason: TopologyDescription {
    type: 'ReplicaSetNoPrimary',
    servers: Map(1) { 'localhost:27017' => [ServerDescription] },
    stale: false,
    compatible: true,
    heartbeatFrequencyMS: 10000,
    localThresholdMS: 15,
    setName: 'rs0',
    maxSetVersion: 1,
    maxElectionId: new ObjectId("7fffffff0000000000000004"),
    commonWireVersion: 13,
    logicalSessionTimeoutMinutes: undefined
  }
}

MongoDB 通过 home-brew 作为服务安装,因此它随机器启动。由于我需要使用事务,因此我通过编辑将我的实例转换为副本集mongod.conf添加复制

systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1
replication:
  oplogSizeMB: 128
  replSetName: "rs0"
  enableMajorityReadConcern: true

并连接到它显示rs0:PRIMARY> shell 中提示:

rs0:PRIMARY> rs.status()
{
    "set" : "rs0",
    "date" : ISODate("2021-12-12T08:33:55.844Z"),
    "myState" : 1,
    "term" : NumberLong(4),
    "syncSourceHost" : "",
    "syncSourceId" : -1,
    "heartbeatIntervalMillis" : NumberLong(2000),
    "majorityVoteCount" : 1,
    "writeMajorityCount" : 1,
    "votingMembersCount" : 1,
    "writableVotingMembersCount" : 1,
    "optimes" : {
        "lastCommittedOpTime" : {
            "ts" : Timestamp(1639298030, 1),
            "t" : NumberLong(4)
        },
        "lastCommittedWallTime" : ISODate("2021-12-12T08:33:50.600Z"),
        "readConcernMajorityOpTime" : {
            "ts" : Timestamp(1639298030, 1),
            "t" : NumberLong(4)
        },
        "appliedOpTime" : {
            "ts" : Timestamp(1639298030, 1),
            "t" : NumberLong(4)
        },
        "durableOpTime" : {
            "ts" : Timestamp(1639298030, 1),
            "t" : NumberLong(4)
        },
        "lastAppliedWallTime" : ISODate("2021-12-12T08:33:50.600Z"),
        "lastDurableWallTime" : ISODate("2021-12-12T08:33:50.600Z")
    },
    "lastStableRecoveryTimestamp" : Timestamp(1639297999, 2),
    "electionCandidateMetrics" : {
        "lastElectionReason" : "electionTimeout",
        "lastElectionDate" : ISODate("2021-12-12T07:28:18.023Z"),
        "electionTerm" : NumberLong(4),
        "lastCommittedOpTimeAtElection" : {
            "ts" : Timestamp(0, 0),
            "t" : NumberLong(-1)
        },
        "lastSeenOpTimeAtElection" : {
            "ts" : Timestamp(1639293898, 1),
            "t" : NumberLong(3)
        },
        "numVotesNeeded" : 1,
        "priorityAtElection" : 1,
        "electionTimeoutMillis" : NumberLong(10000),
        "newTermStartDate" : ISODate("2021-12-12T07:28:18.032Z"),
        "wMajorityWriteAvailabilityDate" : ISODate("2021-12-12T07:28:18.037Z")
    },
    "members" : [
        {
            "_id" : 0,
            "name" : "localhost:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 3943,
            "optime" : {
                "ts" : Timestamp(1639298030, 1),
                "t" : NumberLong(4)
            },
            "optimeDate" : ISODate("2021-12-12T08:33:50Z"),
            "syncSourceHost" : "",
            "syncSourceId" : -1,
            "infoMessage" : "",
            "electionTime" : Timestamp(1639294098, 1),
            "electionDate" : ISODate("2021-12-12T07:28:18Z"),
            "configVersion" : 1,
            "configTerm" : 4,
            "self" : true,
            "lastHeartbeatMessage" : ""
        }
    ],
    "ok" : 1,
    "$clusterTime" : {
        "clusterTime" : Timestamp(1639298030, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    },
    "operationTime" : Timestamp(1639298030, 1)
}

然后我将连接 uri 和选项修改为:



const {
  MONGO_USERNAME,
  MONGO_PASSWORD,
  MONGO_HOSTNAME,
  MONGO_PORT,
  MONGO_DB,
  REPLICA_SET
} = process.env;

const options = {
  // useNewUrlParser: true,
  // useUnifiedTopology: true,
  // useCreateIndex:true,
  // useFindAndModify: false,
  // reconnectTries: Number.MAX_VALUE,
  // reconnectInterval: 500,
  connectTimeoutMS: 10000,

};
const url = `mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@${MONGO_HOSTNAME}:${MONGO_PORT}/${MONGO_DB}?replicaSet=${REPLICA_SET}`;


mongoose.connect(url, options)
  .then(con => {
    console.log('MongoDB is successfully connected. \n\n ');//, con.connections);
  })

  .catch(function (err) {
    console.log(err);
  });

环境值:

PORT=3000
MONGO_USERNAME=someName
MONGO_PASSWORD=somePassword

MONGO_HOSTNAME=127.0.0.1
MONGO_PORT=27017
MONGO_DB=fixit
REPLICA_SET=rs0

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongooseServerSelectionError:连接到副本集时连接 ECONNREFUSED ::1:27017 的相关文章

  • node.js 发送 css 文件

    我正在尝试让 node js 服务器发送 css 文件 我在这里修改这个服务器 http github com LearnBoost Socket IO node blob master test server js http github
  • 如何将现有回调 API 转换为 Promise?

    我想使用 Promise 但我有一个回调 API 其格式如下 1 DOM加载或其他一次性事件 window onload set to callback window onload function 2 普通回调 function requ
  • 如何在node.js中分离TCP套接字消息

    我正在尝试使用 TCP 套接字 并且对消息如何到达我的应用程序感到困惑 看来他们已经分手了 有人知道我怎样才能最好地将他们重新组合在一起吗 所有消息均以换行符分隔 r n var stream net createConnection po
  • 当我使用nodemon和ts-node时,为什么节点检查器没有启动?

    我有一个用打字稿编写的简单节点服务器 我的 package json 配置为 scripts build tsc dev nodemon watch src e ts json exec ts node src server ts debu
  • Node.js 和代码优先

    我使用代码优先方法开发实体框架 现在我正在学习 Node js 我想知道是否有一种方法可以使用 Node js 和一些库来实现相同的代码优先方法 我正在考虑使用MySql作为数据库 你可以看看续集 http docs sequelizejs
  • 如何对 mongodb/mongoid 脚本进行基准测试,以比较两种不同的查询技术

    您对如何测试两种不同的 mongoid mongodb 查询实现的性能有什么建议吗 要比较的实现与以前的相关 问答 https stackoverflow com questions 10121977 extracting modellin
  • mocha——手表和猫鼬模型

    如果我让 mocha 监视更改 每次保存文件时 mongoose 都会抛出以下错误 OverwriteModelError 无法覆盖Client模型一旦编译 我知道猫鼬不允许两次定义模型 但我不知道如何让它与mocha watch clie
  • 状态代码 304(Jade、Node、Express)

    我在我的 jade 文件中链接 bootstrap 和 jquery link rel stylesheet href stylesheets bootstrap css and script src javascripts jquery
  • AWS SDK S3 node.js 连接到本地 MinIO 服务器

    我有用 Node js 编写的应用程序服务器 它将文件上传到 AWS S3 存储 为此我正在使用https www npmjs com package aws sdk https www npmjs com package aws sdk当
  • 如何在 NodeJS 中允许表单数据

    我最近创建了一个接受文件的 API 我正在尝试使用 Postman 测试 API 如果我使用发出帖子请求x wwww form urlencoded身体类型 一切正常 我得到了所有预期的数据 唯一的问题是它不允许发送文件 如果我使用form
  • Nodejs:在哪里或如何编写复杂的业务逻辑?

    最近我接触到了node js 和一些很酷的包 比如express 和jade 我一直有几个问题不断地敲我的门 如果我选择 Node js 来构建我的下一个网站 我将使用 JavaScript 来编写服务器端复杂的逻辑 但我不认为你可以将 J
  • Node.js 客户端中的 Windows 集成身份验证

    当使用node js作为客户端时 是否可以使用Windows集成身份验证连接到服务器 例如连接到IIS时 我对此的搜索仅出现使用 node js 作为服务器的结果 2015 年更新 现在有一些模块实现了 Windows 集成身份验证 节点
  • Mongoose 限制/偏移量和计数查询

    查询性能有点奇怪 我需要运行一个查询来计算文档总数 并且还可以返回一个可以限制和偏移的结果集 所以 我总共有 57 个文档 用户想要 10 个文档偏移 20 我可以想到两种方法来做到这一点 首先是查询所有 57 个文档 以数组形式返回 然后
  • 如何运行指定 node.js 版本 8 的 eb init?

    I run eb init并部署 我得到了node js版本6 如何在执行时指定我想要node js版本8eb init命令 这是一个有趣的问题 我很想知道是否有更简单的方法 但我是这样实现的 确定最新的SolutionStack名称如所列
  • Express+jade:局部变量在视图中不可用

    我遇到了一个非常基本的问题 但我似乎找不到答案 我正在与node js express我只是想将局部变量传递到视图中 如下所示 app get function req res res render index locals title B
  • sails js 数据关系

    sails js 是否支持模型 集合之间的关系 如果是这样 有人可以指出文档吗 例如 我有 2 个模型 1 生产 production name string description text 2 Album album name stri
  • 阻止 PM2 上不同时运行的请求

    在我的 Express 应用程序中 我在应用程序中定义了 2 个端点 一种用于 is sever up 检查 另一种用于模拟阻塞操作 app use status req res gt res sendStatus 200 app use
  • 从 node.js 创建对 AWS ES 实例的有效签名请求

    我试图找到一个示例 说明如何连接到 Node js 中的 AWS ES 实例 然后通过一个简单的请求访问 ES 集群 我正在尝试使用elasticsearch节点包 https www npmjs com package elasticse
  • 如何使用node.js获取屏幕分辨率

    我需要使用 node js 获取屏幕分辨率 但以下代码不起作用 var w screen width var h screen height 这也行不通 var w window screen width var h window scre
  • Docker-compose:npm 安装成功后卷中不存在 node_modules

    我有一个具有以下服务的应用程序 web 在端口 5000 上保存并运行 python 3 Flask Web 服务器 使用 sqlite3 worker 有一个index js文件是队列的工作人员 Web 服务器通过端口使用 json AP

随机推荐