You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Mongoose连接MongoDB报错:密码含未转义非法字符,求解决方案

问题排查与修复方案

嘿,这个问题我之前也踩过坑,其实就是MongoDB连接字符串里的密码特殊字符没转义导致的,咱们一步步来解决:

问题根源

你收到的报错Password contains an illegal unescaped character,说明你的MongoDB连接URI(就是config.get('mongoURI')读取的那个地址)里的密码包含了特殊字符(比如@、$、#、!这类),而这些字符没有经过URL编码,mongoose在解析连接字符串的时候就会抛出错误。

具体修复步骤

1. 定位你的MongoDB连接字符串

首先找到项目里的config配置文件(一般是config/default.json或者config/custom-environment-variables.json),里面应该有类似这样的内容:

{
  "mongoURI": "mongodb+srv://你的用户名:你的密码@集群地址/数据库名?retryWrites=true&w=majority"
}

重点检查你的密码这部分,有没有包含特殊字符。

2. 对密码进行URL编码

把密码里的特殊字符替换成对应的URL编码,常见的对应关系:

  • @ → %40
  • $ → %24
  • → %23
  • ! → %21
  • & → %26

如果你不想手动替换,也可以用Node.js自带的工具快速编码:打开终端,运行以下命令(把你的原始密码换成实际密码):

node -e "console.log(encodeURIComponent('你的原始密码'))"

终端会输出编码后的密码,直接复制这个结果替换到连接字符串的密码位置。

3. 更新配置并重启服务

把编码后的密码替换到config文件的mongoURI里,保存文件后,重新运行npm run server,应该就能看到MongoDB Connect...的成功提示了。

额外检查点

  • 确认连接字符串的格式是否正确:比如用户名和密码之间的冒号、@符号的位置有没有写错;
  • 如果是使用MongoDB Atlas,确保你的IP地址已经加入了Atlas的白名单(不过这个报错和白名单无关,但如果后续连接失败可以排查这个点)。

内容的提问来源于stack exchange,提问作者geekmonster

火山引擎 最新活动