首页 > 解决方案 > 通过 mongoose 连接到 MongoDB 会出现身份验证失败错误

问题描述

我正在尝试使用如下连接字符串连接到我的 Mongo 集群:

module.exports = {
  MongoURI: MongoURI: 'mongodb+srv://philip:DummyPassword9$@test-cluster-026fd.mongodb.net/test?retryWrites=true'
}

并在 app.js 中设置了我的配置:

const express = require('express');
const expressLayouts = require('express-ejs-layouts');
const mongoose = require('mongoose');

const app = express();

// DB Config
const db = require('./config/keys').MongoURI;

// Connect to Mongo
mongoose.connect(db, { useNewUrlParser: true })
.then(() => console.log('MongoDB Connected....'))
.catch(err => console.log(err));

//EJS
app.use(expressLayouts);
app.set('view engine', 'ejs');

// Routes
app.use('/', require('./routes/index'));
app.use('/users', require('./routes/users'));

const PORT = process.env.PORT || 5000;

app.listen(PORT, console.log(`Server started on port ${PORT}`));

但是我没有连接到 Mongo 集群,而是得到一个错误:

MongoError: authentication fail

我阅读了所有可以在网上找到的与此问题相关的内容,我尝试像这样对我的密码进行编码:

module.exports = {
  MongoURI: `mongodb+srv://philip:${encodeURIComponent('DummyPassword9')}$@test-cluster-026fd.mongodb.net/test?retryWrites=true`
}

但是我仍然无法连接,并且出现此错误。我确定我的帐户密码是正确的,我做错了什么?

标签: node.jsexpressmongoose

解决方案


您通过 url 进行连接,因此您必须将密码更改为 URL 编码格式。
“$”替换为“%24”并检查。
参考:HTML URL 编码


推荐阅读