mongodb+srv URI 不能有端口号

Cro*_*asr 8 mongodb node.js express

我有(注意:用户名和密码是组成的):

const CONNECTION_URL = "mongodb+srv://smith_bob:smith_bob@hotmail.com:T@llyHo!:@cluster0.r92qc.mongodb.net/myFirstDatabase?retryWrites=true&w=majority";
const PORT = process.env.PORT || 5000;

mongoose.connect(CONNECTION_URL,{useNewUrlParser: true, useUnifiedTopology: true})
    .then(()=>app.listen(PORT,()=> console.log(`Server running on port: ${PORT}`)))
    .catch((error)=> console.log(error.message));
Run Code Online (Sandbox Code Playgroud)

但当我运行nodemon index.js时得到以下信息:

mondodb+srv URI 不能有端口号 \
[nodemon] 干净退出 - 重新启动前等待更改

有什么想法吗?

我尝试使用百分比编码字符,但出现如下错误:

. . . smith_bob:smith_bob@hotmail.com:%40@llyHo!: . . .

mongodb+srv URI 不能有端口号

. . . smith_bob%3Asmith_bob%40hotmail.com%3AT%40llyHo!%3A . . .

错误的身份验证:身份验证失败

. . . smith_bob:smith_bob%40hotmail.com%3AT%40llyHo!: . . .

密码包含未转义字符

. . . smith_bob:smith_bob@hotmail.com%3AT%40llyHo!: . . .

mongodb+srv URI 不能有端口号

小智 9

似乎是因为主机之前存在多个@且没有百分比编码。尝试以以下格式提供::cluster0.r92qc.mongodb.net

mongodb+srv://username:password@host
Run Code Online (Sandbox Code Playgroud)

如果用户名或密码包含任一: / ? # [ ] @字符,则必须使用百分号编码进行转换。以您的连接字符串为例,如果用户名是smith_bob:smith_bob@hotmail.com,密码是T@llyHo!:,则应分别转换为smith_bob%3Asmith_bob%40hotmail.comT%40llyHo!%3A,连接字符串将变为:

"mongodb+srv://smith_bob%3Asmith_bob%40hotmail.com:T%40llyHo!%3A@cluster0.r92qc.mongodb.net/myFirstDatabase?retryWrites=true&w=majority"
Run Code Online (Sandbox Code Playgroud)

要了解有关连接字符串格式的更多信息,请参阅此处