未处理的承诺拒绝:错误:网址格式错误,无法解析

时间:2018-05-29 17:45:54

标签: mongodb amazon-ec2 mongoose

我同时是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。

7 个答案:

答案 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

或任何您想使用的密码