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

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 DNS 1.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:57:32