You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB连接报错:已设置useNewUrlParser仍提示密码包含未转义字符

报错原因

Password contains unescaped characters 报错的核心是MongoDB连接字符串的密码段包含URL规范中的保留字符(如@、:、/、?、#、空格等)。useNewUrlParser: true仅负责切换URL解析引擎,不会自动对密码中的特殊字符做转义处理,因此配置后依然会触发报错。

解决方案
  • 方案1:手动转义特殊字符
    将密码中的保留字符替换为对应的百分号编码,常见对应关系如下:
特殊字符编码值
@%40
:%3A
/%2F
?%3F
#%23
空格%20

比如原密码为abc@123#xyz,转义后为abc%40123%23xyz,替换到.env文件的MONGO_URL密码段即可。

  • 方案2:使用内置方法自动编码(推荐)
    调用Node.js内置的encodeURIComponent方法自动处理密码转义,避免手动替换遗漏。修改你的连接代码如下:
const express = require("express");
const app = express();
const mongoose = require("mongoose");
const dotenv = require("dotenv");

dotenv.config();

connectDB().catch(err => console.log(err)); 

async function connectDB() {
  // 解析连接字符串,单独对密码做转义处理
  const mongoConnUrl = new URL(process.env.MONGO_URL);
  mongoConnUrl.password = encodeURIComponent(mongoConnUrl.password);
  
  await mongoose.connect(mongoConnUrl.toString(), {
      useNewUrlParser: true,
  })
  .then(() => console.log("DB Connection Success"))
  .catch((err) => console.log(err));
}

app.listen(8800, () => {
console.log("Backend Server is running");
});
  • 方案3:拆分连接参数传入
    直接将连接参数拆分为独立配置项传入,无需拼接URL,从根源避免转义问题。需要将.env中的连接信息拆分为单独的用户名、密码、地址、库名等变量:
await mongoose.connect({
  user: process.env.MONGO_USER,
  pass: process.env.MONGO_PASS,
  host: process.env.MONGO_HOST,
  port: process.env.MONGO_PORT || 27017,
  dbName: process.env.MONGO_DB_NAME,
  useNewUrlParser: true
})
注意事项

如果.env文件中MONGO_URL的首尾加了单引号或双引号,请先删除引号,否则引号会被识别为密码的一部分,也会触发该报错。

内容的提问来源于stack exchange,提问作者Daniel Kwame Amissah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:06:03