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

连接MongoDB Atlas时出现认证失败错误,请求排查解决

解决Node.js + Mongoose连接MongoDB Atlas认证失败问题

错误日志

MongoError: bad auth : Authentication failed.
at MessageStream.messageHandler (C:\Users\formi\Documents\code\portfolio--my-bubble-server\node_modules\mongodb\lib\cmap\connection.js:268:20)
at MessageStream.emit (node:events:513:28)
at MessageStream.emit (node:domain:489:12)
at processIncomingData (C:\Users\formi\Documents\code\portfolio--my-bubble-server\node_modules\mongodb\lib\cmap\message_stream.js:144:12)
at MessageStream._write (C:\Users\formi\Documents\code\portfolio--my-bubble-server\node_modules\mongodb\lib\cmap\message_stream.js:42:5)
at writeOrBuffer (node:internal/streams/writable:392:12)
at _write (node:internal/streams/writable:333:10)
at MessageStream.Writable.write (node:internal/streams/writable:337:10)
at TLSSocket.ondata (node:internal/streams/readable:766:22)
at TLSSocket.emit (node:events:513:28)
at TLSSocket.emit (node:domain:489:12)
at addChunk (node:internal/streams/readable:324:12)
at readableAddChunk (node:internal/streams/readable:297:9)
at TLSSocket.Readable.push (node:internal/streams/readable:234:10)
at TLSWrap.onStreamRead (node:internal/stream_base_commons:190:23) {
ok: 0,
code: 8000,
codeName: 'AtlasError'
} connection successful

项目代码

import express from 'express'
import mongoose from 'mongoose'
import 'dotenv/config'
import { retrieveWhileTechCollection, retrieveWholeProjectCollection, 
retriveAllOfProjectAndTechCollections, retrivedataForLandingSite } from 
'./routes/retrieveData'
import updateMyData from './routes/updateMyData'
import cors from 'cors'

const app = express()
const port = process.env.PORT || 8001

app.use(cors())

app.use('/demo', retrieveWholeProjectCollection, retrieveWhileTechCollection)
app.use('/', retriveAllOfProjectAndTechCollections, updateMyData, retrivedataForLandingSite)

app.listen(port, () => console.log(`server started at http://localhost:${port}`))

mongoose.connect(process.env.MONGO_URI, {
  useCreateIndex: true, useNewUrlParser: true, useUnifiedTopology: true
}, () => console.log('connected to db'))

mongoose.connection
  .once('open', () => console.log('connection successful'))
  .on('error', (error) => console.log(error, 'connection successful'))

.env配置

MONGO_URI=mongodb+srv://username:password@cluster0.wvtkc.mongodb.net/?retryWrites=true&w=majority

排查与修复步骤

  • 核对数据库账号密码
    确保MONGO_URI里的username和password与MongoDB Atlas控制台创建的数据库用户完全一致,注意大小写区分。如果密码包含@、:等特殊字符,必须做URL编码替换,比如@替换为%40,:替换为%3A。

  • 检查用户权限
    登录Atlas控制台,确认该数据库用户拥有目标数据库的readWrite权限,权限不足会触发认证失败。

  • 验证网络白名单
    在Atlas控制台的「网络访问」设置中,检查当前服务器/本地IP是否在白名单内,测试阶段可以暂时设置为允许所有IP(0.0.0.0/0),排除网络拦截问题。

  • 修正连接代码的错误提示
    现有代码错误地在连接失败时也输出connection successful,导致判断混淆。替换为Promise风格的连接逻辑,精准反馈状态:

    // 替换原mongoose.connect及后续代码
    mongoose.connect(process.env.MONGO_URI)
      .then(() => console.log('数据库连接成功'))
      .catch(err => console.error('数据库连接失败:', err));
    

    另外,Mongoose 6.x及以上版本已默认启用useNewUrlParser、useUnifiedTopology等配置,无需手动指定。

  • 确认环境变量加载正常
    在连接前添加打印语句,验证MONGO_URI是否正确读取:

    console.log('当前Mongo URI:', process.env.MONGO_URI); // 测试用,验证后可删除
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:15:57