如何解决无法使用Mongoose连接到MongoDB
我正在关注this video tutorial on the MERN stack,由于某些非常奇怪的原因,我无法连接到MongoDB。这个问题使我很沮丧,因为我可能只是缺少了一些非常基本知识,因此,如果答案对您来说很痛苦,请原谅我。
视频使用了针对MongoDB的mlab,该模型已不再可用,因此我改用MongoDB Atlas。我用来将应用程序连接到数据库的密钥是:
mongodb+srv://<username>:<password>@fs-shopping-list.6rzkd.mongodb.net/<dbname>?retryWrites=true&w=majority
我的密码不包含任何特殊字符,并且我的IP地址在白名单上。对于dbname
,我有一个名为“ data”的数据库,其中有一个名为“ items”的集合,所以我正在为dbname
使用“ data”。
引起我问题的代码位于一个名为server.js
的文件中:
const db = require('./config/keys').mongoURI; // I keep my key in a separate file in the way shown in the video
// Connect to MongoDB
mongoose
.connect(db,{ useNewUrlParser: true,useUnifiedTopology: true })
.then(() => console.log('MongoDB connected.'))
.catch(err => console.log(err));
尝试运行服务器时,我不断收到此错误(我从某些路径中删除了我的名字):
{ MongooseServerSelectionError: bad auth Authentication failed.
at NativeConnection.Connection.openUri (/fs_shopping_list/node_modules/mongoose/lib/connection.js:828:32)
at Mongoose.connect (/fs_shopping_list/node_modules/mongoose/lib/index.js:335:15)
at Object.<anonymous> (/fs_shopping_list/server.js:15:6)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
message: 'bad auth Authentication failed.',reason:
TopologyDescription {
type: 'ReplicaSetNoPrimary',setName: null,maxSetVersion: null,maxElectionId: null,servers:
Map {
'fs-shopping-list-shard-00-01.6rzkd.mongodb.net:27017' => [ServerDescription],'fs-shopping-list-shard-00-02.6rzkd.mongodb.net:27017' => [ServerDescription],'fs-shopping-list-shard-00-00.6rzkd.mongodb.net:27017' => [ServerDescription] },stale: false,compatible: true,compatibilityError: null,logicalSessionTimeoutMinutes: null,heartbeatFrequencyMS: 10000,localThresholdMS: 15,commonWireVersion: null } }
有人可以帮助我找出我做错了什么,以便我继续本教程吗?谢谢您的时间。
编辑:自admin accounts on MongoDB have the ability to read and write to their databases开始,我不认为添加另一个数据库访问帐户将解决此问题。我唯一能想到的可能就是阻止我,也许是我的诺顿防病毒软件,尽管我不确定如何验证这个假设。
解决方法
以下是我如何使用mongoose
的示例:
const connectToMongo = async () => {
try {
await mongoose.connect(mongoUrl,{ useNewUrlParser: true });
console.log('connected to MongoDB');
} catch(error) {
console.log('error connection to MongoDB:',error.message);
}
};
以下是mongoUrl
的示例:mongo+srv://username:password@cluster0-ipl5c.mongodb.net/collectionname?retryWrites=true
请请确保您创建了一个用于读写数据库的用户,该数据库不是管理员帐户。您从“连接”获得的URI字符串按钮可能会使用管理员帐户,即使您不是要在URI字符串中使用的帐户,也请记住这一点。如果您这样做了却仍然无法连接,请使用以下清单:
- 检查是否已将正确的IP列入白名单
- 检查用户是否具有正确的权限
- 检查您使用的数据库名称(集合)是否正确
- 检查密码(https://docs.atlas.mongodb.com/troubleshoot-connection/#special-pass-characters)中是否包含特殊字符
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。