Payload CMS 连接 MongoDB 时为何提示用户名含未转义字符?
数据小许
结论
报错是因为 DATABASE_URI 格式错误:配置中把本地地址 mongodb://127.0.0.1/basic-setup 和 MongoDB Atlas 地址 mongodb+srv://... 拼在了一起,导致驱动将前半段错误地解析为用户名或连接信息。根据给出的内容,密码 3g.. 本身不需要转义。
当前配置中包含两段连接协议:
mongodb://127.0.0.1/basic-setupmongodb+srv://basic-setup-user:3g..@cluster0.zbczkaw.mongodb.net/basic-setup-db?appName=Cluster0
MongoDB URI 只能指定一个连接目标,不能直接拼接本地 URI 和 Atlas URI。
选择正确的连接字符串
如果要连接 MongoDB Atlas,请将 .env 中的 DATABASE_URI 设置为单独的 Atlas URI:
DATABASE_URI=mongodb+srv://basic-setup-user:3g..@cluster0.zbczkaw.mongodb.net/basic-setup-db?appName=Cluster0
如果要连接本机 MongoDB,可以使用本地 URI,例如:
DATABASE_URI=mongodb://127.0.0.1:27017/basic-setup-db
根据实际运行的 MongoDB 实例,保留其中一种配置。选择 Atlas 时,还需确认集群可用,且网络访问设置允许当前环境连接。
修改后检查
- 检查
.env中的DATABASE_URI,确认整行只有一个协议前缀,主机和数据库名也与所选实例对应。 - 确认 Payload CMS 从该环境变量读取连接 URI。修改
.env后,重新启动开发进程,让新值生效。 - 如果仍然出现认证错误,再检查 Atlas 中的数据库用户名和密码是否正确。只有密码包含 URI 中有特殊含义的字符时,才需要按 URI 规则进行百分号编码。
Username contains unescaped characters 是错误 URI 被解析后出现的提示,并不表示用户名或密码一定包含特殊字符。
备注:内容仅供参考。
