我同时是aws和mongodb的新手,所以我在尝试连接到我的mongo数据库时遇到了一个非常基本的问题,这个数据库是在亚马逊linux ec2实例上托管的。原因是,我无法构建数据库的路径。
以下是我正在尝试使用的内容:mongoose.connect('mongod://ec2-user@ec2-XX-XX-XXX-XXX-XX.compute-1.amazonaws.com:27017/test' )
。
这是我的测试lambda函数的结果:UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: URL malformed, cannot be parsed
我正在使用mongodb 3.6.5。
答案 0 :(得分:14)
Mongoose 5.x支持以下授权语法,并确保您没有在@,-,+,>
mongoose.connect(MONGO_URL, {
auth: {
user: MONGO_DB_USER,
password: MONGO_DB_PASSWORD
}
})
或者,如果您要删除删除警告避免“不推荐使用当前的URL字符串解析器"
添加选项useNewUrlParser
mongoose.connect(MONGO_URL, {
auth: {
user: MONGO_DB_USER,
password: MONGO_DB_PASSWORD
},
{ useNewUrlParser: true }
})
答案 1 :(得分:4)
我的问题是一个更简单的URI问题。由于mongod地址中有@
个字符。
我必须使用它:
return mongoose.connect(encodeURI(process.env.DB_CONNECT)
答案 2 :(得分:2)
例如,如果您在环境文件中使用了以下URI,
MongoDB://<dbuser>:<dbpassword>@ds055915.mlab.com:55915/fullstack-vue-graphql
确保您的MONGOD_URI
中的密码没有特殊字符,例如@
。我已将@
用作密码字符的一部分,但出现错误。从DB Password
中删除特殊字符后,所有字符均按预期工作。
答案 3 :(得分:1)
就我而言,以下方法工作正常。
在 db.js
内部const mongoose = require('mongoose');
const MONGODB_URI = "mongodb://host-name:27017/db-name?authSource=admin";
const MONGODB_USER = "mongouser";
const MONGODB_PASS = "myasri*$atIP38:nG*#o";
const authData = {
"user": MONGODB_USER,
"pass": MONGODB_PASS,
"useNewUrlParser": true,
"useCreateIndex": true
};
mongoose.connect(
MONGODB_URI,
authData,
(err) => {
if (!err) { console.log('MongoDB connection succeeded.'); }
else { console.log('Error in MongoDB connection : ' + JSON.stringify(err, undefined, 2)); }
}
);
注意:
我的节点版本为10.x
MongoDb服务器版本为3.6.3
猫鼬的版本是^ 5.1.2
答案 4 :(得分:0)
我只想更新@ anthony-winzlet的答案,因为我有相同的错误,并且已经用此代码解决了。
mongoose.connect(url, {
auth: {
user:'usrkoperasi',
password:'password'
},
useNewUrlParser:true
}, function(err, client) {
if (err) {
console.log(err);
}
console.log('connect!!!');
});
我只添加回调和useNewUrlParser:true
。我使用"mongoose": "^5.2.7",
。
编码愉快!
答案 5 :(得分:0)
如果您将应用程序部署到Heroku,请确保更新了Config Vars
文件中的.env
。至少这是我的情况。
答案 6 :(得分:-1)
我有同样的问题,但密码有问题 不应该是特殊字符
password not use like this Admin@%+admin.com wrong
password use like this Admin right
或任何您想使用的密码