未处理的承诺拒绝:错误:URL 格式错误,无法解析
Posted
技术标签:
【中文标题】未处理的承诺拒绝:错误:URL 格式错误,无法解析【英文标题】:Unhandled promise rejection: Error: URL malformed, cannot be parsed 【发布时间】:2018-11-08 10:43:36 【问题描述】:我同时是 aws 和 mongodb 的新手,所以我在尝试连接到托管在 amazon linux ec2 实例上的我的 mongo 数据库时遇到了一个非常基本的问题。原因是,我无法为我的数据库构建路径。
这是我正在尝试使用的:
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。
【问题讨论】:
【参考方案1】:Mongoose 5.x 支持以下授权语法,并确保您没有在 url 中使用任何特殊字符,例如 @,-,+,>
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
)
【讨论】:
对我来说,使用 Mongoose 5.6.11,只需删除密码字符串中的特殊字符(即+
和 ?
)
@samurai_jane Mongoose 5.6.11 支持 connection string 以及上述 option 语法。但是如果用户名和密码包含特殊字符,上述语法将是有益的。【参考方案2】:
我的问题是一个更简单的 URI 问题。由于 mongod 地址中有一个@
字符。
我不得不使用这个:
return mongoose.connect(encodeURI(process.env.DB_CONNECT)); //added ');'
【讨论】:
对我不起作用:获取MongoParseError: Unescaped at-sign in authority section
encodeURI(process.env.DB_CONNECT)的console.log的输出是什么?
其实这最终解决了我的问题。它最初没有解析的原因是我在我的db-user
名称中使用了“@”符号(误认为是 mLab 帐户名称)。抱歉!
尝试这个后,我得到MongoParseError: Invalid connection string
【参考方案3】:
例如,如果您在环境文件中使用了以下 URI
MongoDB://<dbuser>:<dbpassword>@ds055915.mlab.com:55915/fullstack-vue-graphql
确保MONGOD_URI
中的密码没有像@
这样的特殊字符。我曾将@
用作我的密码字符的一部分,但遇到了错误。从DB Password
中删除特殊字符后,一切都按预期工作。
【讨论】:
【参考方案4】:在我的情况下,以下工作正常。
内部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));
);
注意:
我的 Node 版本是 10.x
MongoDb 服务器版本为 3.6.3
猫鼬版本是^5.1.2
【讨论】:
【参考方案5】:我只想从@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",
。
编码愉快!
【讨论】:
【参考方案6】:如果您将应用部署到 Heroku,请确保更新了 Config Vars
,因为它们在您的 .env
文件中。至少,这是我的情况。
【讨论】:
【参考方案7】:我有同样的问题,但密码有问题 不应该是特殊字符
password not use like this Admin@%+admin.com wrong
password use like this Admin right
或您想使用的任何密码
【讨论】:
以上是关于未处理的承诺拒绝:错误:URL 格式错误,无法解析的主要内容,如果未能解决你的问题,请参考以下文章