0

我正在使用这些说明: https ://help.compose.com/docs/connecting-to-mongodb#mongoose-node-and-compose

这是他们给我的连接字符串:

MONGO_URI=mongodb://*****:******@aws-us-west-2-portal.1.dblayer.com:15782,aws-us-west-2-portal.0.dblayer.com:15782/mydbname?ssl=true

这是我正在尝试的代码:

certFileBuff = [fs.readFileSync(MONGO_CERT_PATH)]
options = {
     mongos: true,
     sslCA: certFileBuff,
     sslValidate: false,
     ssl: true
}

mongoose.connect(MONGO_URI, options)

此时我收到身份验证失败错误:

如果我?ssl=true从连接字符串中删除,我会收到错误: no mongos proxy available

最近有没有人在使用 compose.io 的猫鼬?

4

2 回答 2

0

事实证明。我的密码与连接字符串不符。我将密码更改为更短的密码并且它起作用了。fwiw 无效的密码是:tapasleechframegoldrabbitsauceb88(显然我不再使用了)

我学到了什么:如果你得到一个mongos proxy error可能不好的配置。确保ssl=true在连接字符串和ssl: true配置中设置。

如果您收到code: 18身份验证错误,则密码错误或格式不正确。

这是我的最终工作代码:

const MONGO_URI = mongodb://****:*****@aws-us-west-2-portal.1.dblayer.com:15782,aws-us-west-2-portal.0.dblayer.com:15782/dbName?ssl=true


let ca, options = {}

if(MONGO_CERT_PATH) {
    try {
        ca = fs.readFileSync(encodeURI(MONGO_CERT_PATH))
        options = {
            mongos: {
                ssl: true,
                sslValidate: true,
                sslCA: [ ca ]
            }
        }
    } catch(err) {
        logger.warn('mongo ssl cert missing')
    }
}

let db = mongoose.connection
db.on('error', (e) => logger.error('connection error:', e))
db.once('open', () => {
    logger.info('db connected')
})

mongoose.connect(MONGO_URI, options)
于 2017-02-19T21:42:38.443 回答
0

如果您没有在 mongo 中使用分片,请设置mongosfalse. 您可以在此处阅读有关 mongo 分片的信息https://docs.mongodb.com/manual/core/sharded-cluster-query-router/

于 2017-02-19T00:20:32.227 回答