本机嵌入在mongoose中的自动重新连接功能在我的项目上不起作用。
我实际上收到了一个错误返回,但是在我配置的X秒之后它不会再次启动。
除了凭据是否正确之外,我希望mongoose尝试每X秒登录一次(因此每次都向我发送一个日志),但实际情况并非如此
下面是有问题的文档:https://mongoosejs.com/docs/connections.html#options
下面是我的代码:
import mongoose from "mongoose"
const options = {
dbName: "testbdd",
pass: "qwe",
user: "alex",
useNewUrlParser: true,
serverSelectionTimeoutMS: 1000,
heartbeatFrequencyMS: 1000,
useUnifiedTopology: true
}
const uri = `mongodb://localhost/`
mongoose.connection.on('disconnected', function () {
console.log('Mongo db disconnected!');
});
mongoose.connect(uri, options).then(() => {
console.log('First Mongo db connexion success !')
}).catch((error) => {
console.log('First Mongo db connexion fail !')
console.log(error)
})
下面是我运行节点服务器时的返回结果:
backend_1 | Mongo db disconnected!
backend_1 | First Mongo db connexion fail !
backend_1 | MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017
backend_1 | at NativeConnection.Connection.openUri (/user/app/node_modules/mongoose/lib/connection.js:800:32)
backend_1 | at /user/app/node_modules/mongoose/lib/index.js:341:10
backend_1 | at /user/app/node_modules/mongoose/lib/helpers/promiseOrCallback.js:31:5
backend_1 | at new Promise (<anonymous>)
backend_1 | at promiseOrCallback (/user/app/node_modules/mongoose/lib/helpers/promiseOrCallback.js:30:10)
backend_1 | at Mongoose.connect (/user/app/node_modules/mongoose/lib/index.js:340:10)
backend_1 | at Object.connect (/user/app/src/db/mongo/index.js:28:10)
backend_1 | at Module._compile (internal/modules/cjs/loader.js:776:30)
backend_1 | at Module._compile (/user/app/node_modules/pirates/lib/index.js:99:24)
backend_1 | at Module._extensions..js (internal/modules/cjs/loader.js:787:10)
backend_1 | at Object.newLoader [as .js] (/user/app/node_modules/pirates/lib/index.js:104:7)
backend_1 | at Module.load (internal/modules/cjs/loader.js:643:32)
backend_1 | at Function.Module._load (internal/modules/cjs/loader.js:556:12)
backend_1 | at Module.require (internal/modules/cjs/loader.js:683:19)
backend_1 | at require (internal/modules/cjs/helpers.js:16:16)
backend_1 | at Object.require (/user/app/src/bin/www.js:7:1) {
backend_1 | message: 'connect ECONNREFUSED 127.0.0.1:27017',
backend_1 | reason: TopologyDescription {
backend_1 | type: 'Single',
backend_1 | setName: null,
backend_1 | maxSetVersion: null,
backend_1 | maxElectionId: null,
backend_1 | servers: Map { 'localhost:27017' => [ServerDescription] },
backend_1 | stale: false,
backend_1 | compatible: true,
backend_1 | compatibilityError: null,
backend_1 | logicalSessionTimeoutMinutes: null,
backend_1 | heartbeatFrequencyMS: 1000,
backend_1 | localThresholdMS: 15,
backend_1 | commonWireVersion: null
backend_1 | }
backend_1 | }
这些选择应该很有效,不是吗?
serverSelectionTimeoutMS: 1000,
heartbeatFrequencyMS: 1000,
useUnifiedTopology: true
我真的迷路了。我怀疑这是猫鼬代码没有工作,这必然是我的实现。
你能帮我吗?
这是mongodb驱动程序的预期行为
https://jira.mongodb.org/browse/node-834?focusedcommentid=1412582&page=com.atlassian.jira.plugin.system.issuetabpanels%3acomment-tabpanel#comment-1412582
如果驱动程序无法连接到主机,它将在第一次连接时失败。这样做的目的是确保在无法访问的主机上快速失败。重新连接行为仅在驱动程序执行了初始连接后才开始。