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

Node.js连接MongoDB出现Authentication failed错误求助

Node.js连接MongoDB认证失败的排查与解决

以下是几种常见的问题及对应解决办法:

  • 认证数据库未指定
    多数场景下,用户是在admin数据库下创建的,但Node.js的mongodb库默认会使用连接字符串中指定的业务数据库作为认证源。而mongosh默认优先用admin库认证,这就导致凭证一致但认证结果不同。
    解决:在连接字符串末尾添加?authSource=admin,或者在客户端配置中显式设置authSource: 'admin'。

  • 凭证未做URL编码
    如果用户名或密码包含@、&、/等特殊字符,mongosh会自动处理编码,但Node.js不会,直接传递会导致凭证解析错误。
    解决:用encodeURIComponent()分别对用户名和密码进行编码后,再拼接进连接字符串。

  • mongodb库版本不兼容
    若MongoDB服务器版本较高(比如5.0+),但使用的mongodb npm包版本过旧,可能存在认证协议(如SCRAM-SHA-256)不支持的情况。
    解决:执行npm install mongodb@latest升级到最新稳定版。

  • 认证机制未显式指定
    部分服务器配置要求使用特定的认证机制,旧版本mongodb库可能默认使用SCRAM-SHA-1,而服务器仅支持SCRAM-SHA-256。
    解决:在连接选项中添加authMechanism: 'SCRAM-SHA-256'。

示例代码

const { MongoClient } = require('mongodb');
require('dotenv').config();

// 对凭证进行URL编码,指定认证库和机制
const uri = `mongodb://${encodeURIComponent(process.env.DB_USER)}:${encodeURIComponent(process.env.DB_PASS)}@localhost:27017/${process.env.DB_NAME}?authSource=admin&authMechanism=SCRAM-SHA-256`;

async function connectDB() {
  const client = new MongoClient(uri);
  try {
    await client.connect();
    console.log('MongoDB连接成功');
  } catch (err) {
    console.error('连接失败:', err);
  } finally {
    await client.close();
  }
}

connectDB();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:44:55