NodeJS连接Ubuntu服务器MongoDB时出现认证及数据库名称错误
解决MongoDB连接的数据库名称无效与认证问题
问题分析
从错误信息能直接看到两个核心问题:
- 数据库名称非法:连接字符串末尾的
/被识别为数据库名的一部分,导致MongoDB判定数据库名(如messio/)无效,触发InvalidNamespace错误。 - 认证数据库未指定:你的admin用户是在
admin数据库下创建的,默认情况下Mongoose会尝试用目标数据库(dbname)认证,但该数据库尚未创建,且admin用户的权限信息存储在admin库,因此会出现认证失败。
修复方案
1. 修正连接字符串
去掉连接字符串末尾的斜杠,同时添加authSource=admin参数指定认证数据库:
const mongoose = require("mongoose"); mongoose.set("strictQuery", true); // 修复后的连接代码 mongoose .connect(`mongodb://${process.env.DB_USER_PASS}@2.56.247.250:27017/dbname?authSource=admin`) .then(() => console.log('已连接到数据库')) .catch((err) => console.log("连接错误:", err));
注意:
process.env.DB_USER_PASS必须是用户名:密码的格式,比如admin:yourAdminPassword,确保环境变量配置正确。
2. 验证admin用户权限
登录MongoDB Shell确认用户权限:
# 以admin用户身份连接到admin库认证 mongo -u admin -p 你的密码 --authenticationDatabase admin # 切换到目标数据库(不存在会自动创建) use dbname # 查看用户权限 db.runCommand({ usersInfo: "admin", showPrivileges: true })
3. 检查服务器MongoDB配置
确保Ubuntu服务器允许远程连接:
- 编辑
/etc/mongod.conf,将bindIp改为0.0.0.0(生产环境建议限制为特定IP) - 重启MongoDB服务:
sudo systemctl restart mongod
内容的提问来源于stack exchange,提问作者Arnaud Derison
相关产品推荐
相关产品推荐

