连接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
相关产品推荐
相关产品推荐

