Next.js 14中使用Mongoose连接MongoDB Atlas失败求助
Next.js + Mongoose 连接 MongoDB Atlas 失败:queryTxt ETIMEOUT 及插入缓冲超时问题
我在 Next.js 项目中使用 Mongoose 连接 MongoDB Atlas 时遭遇了无法解决的连接问题,已经花费一整天排查,尝试过 VS Code 生成的连接字符串和官方驱动连接字符串均无效。
核心报错信息
- 执行插入操作时触发缓冲超时:
topics.insertOne()缓冲超时 - DNS 解析错误:
queryTxt ETIMEOUT cluster0.h1rv4ya.mongodb.net
已完成的排查动作
- 将本地 IP 加入 MongoDB Atlas 的 IP 白名单(甚至尝试过允许所有 IP 的
0.0.0.0/0) - 修改本地 DNS 配置(切换至 Google DNS
8.8.8.8和 Cloudflare DNS1.1.1.1) - 本地 MongoDB 实例可正常连接,排除 Mongoose 基础功能问题
相关代码片段
.env 配置文件
MONGODB_URI="mongodb+srv://<用户名>:<密码>@cluster0.h1rv4ya.mongodb.net/<数据库名>?retryWrites=true&w=majority"
Mongoose 连接逻辑(lib/mongodb.js)
import mongoose from 'mongoose'; export async function connectDB() { try { // 避免重复连接 if (mongoose.connections[0].readyState === 1) return; await mongoose.connect(process.env.MONGODB_URI); console.log('MongoDB Atlas 连接成功'); } catch (error) { throw new Error('MongoDB 连接失败: ' + error.message); } }
数据模型(models/Topic.js)
import mongoose from 'mongoose'; const topicSchema = new mongoose.Schema({ title: { type: String, required: true }, content: { type: String, required: true } }); // 防止重复定义模型 export default mongoose.models.Topic || mongoose.model('Topic', topicSchema);
API 路由(app/api/topics/route.js)
import { connectDB } from '@/lib/mongodb'; import Topic from '@/models/Topic'; import { NextResponse } from 'next/server'; export async function POST(request) { try { await connectDB(); const requestData = await request.json(); await Topic.create(requestData); return NextResponse.json({ message: 'Topic 创建成功' }, { status: 201 }); } catch (error) { return NextResponse.json({ message: error.message }, { status: 500 }); } }
求助
希望能帮忙定位连接失败的根本原因,并提供可落地的解决办法。
内容的提问来源于stack exchange,提问作者Furqan Mirza
相关产品推荐
相关产品推荐

