我正在关注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
出于明显的原因,我省略了用户名和密码。如果有人对如何进行有任何想法,将不胜感激!谢谢。
答案 0 :(得分:1)
确保您的用户名和密码不包含特殊字符。它将破坏解析。
这就是导致我遇到相同错误的原因。
答案 1 :(得分:1)
是的,这是因为在密码中使用了特殊字符,只需使用上面的复杂代码进行编码的简单方法即可。
在“密码”中使用十六进制代码代替您在密码中使用的符号,例如,如果您的文本密码为:-pass123#
所以像这样使用它:-pass123%23
从此处获取ASCII码并使用十六进制代码:-https://ascii.cl/
答案 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)