UnhandledPromiseRejectionWarning:错误:URI没有主机名,域名和tld

时间:2019-03-31 20:14:37

标签: javascript node.js mongodb mongoose

我正在关注Wes Bos的教程,了解Node.js。

我下载了所有启动文件,并使用MongoDb Atlas创建了一个数据库。

运行npm start时出现此错误:

UnhandledPromiseRejectionWarning: Error: URI does not have hostname, domain name and tld
DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

我正在使用环境变量连接到数据库

mongoose.connect(process.env.DATABASE);

变量看起来像这样:

DATABASE=mongodb+srv://<username>:<password>@cluster1-rgvum.mongodb.net/test?retryWrites=true

出于明显的原因,我省略了用户名和密码。如果有人对如何进行有任何想法,将不胜感激!谢谢。

6 个答案:

答案 0 :(得分:1)

确保您的用户名和密码不包含特殊字符。它将破坏解析。

这就是导致我遇到相同错误的原因。

答案 1 :(得分:1)

是的,这是因为在密码中使用了特殊字符,只需使用上面的复杂代码进行编码的简单方法即可。

在“密码”中使用十六进制代码代替您在密码中使用的符号,例如,如果您的文本密码为:-pass123#

所以像这样使用它:-pass123%23

从此处获取ASCII码并使用十六进制代码:-https://ascii.cl/

有关更多详细信息:-https://docs.atlas.mongodb.com/troubleshoot-connection/#special-characters-in-connection-string-password

答案 2 :(得分:0)

尝试添加引号:

DATABASE="mongodb+srv://<username>:<password>@cluster1-rgvum.mongodb.net/test?retryWrites=true"

答案 3 :(得分:0)

这与URI(可能是密码)中的特殊字符有关。

尝试一下:

"mongodb+srv://<username>:" + encodeURIComponent(<password>) + "@cluster1-rgvum.mongodb.net/test?retryWrites=true"

答案 4 :(得分:0)

发生这种情况是因为您的密码未经过网址编码。 Mongo连接要求对密码进行URL编码。只需尝试将{useNewUrlParser:true}添加到您的connect方法。见下文:

mongoose.connect(keys.mongoURI, {useNewUrlParser: true}, (err, db) => {});

答案 5 :(得分:0)

面对同样的问题。它不是URL编码的...

快速解决方案 创建安全密码的最佳情况是使用cloud.mongodb.com中的“自动生成安全密码”功能来满足要求。

enter image description here