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

Next.js 13.3版本中使用Mongoose连接MongoDB报错求助

Next.js 13.3 + Mongoose 连接 MongoDB 分步方案

一、前置准备

  • 确保已安装 Mongoose:执行 npm install mongoose 或 yarn add mongoose
  • 在项目根目录创建 .env.local 文件,添加 MongoDB 连接字符串:
    MONGO_URI="mongodb+srv://<你的用户名>:<你的密码>@<集群地址>/<数据库名>?retryWrites=true&w=majority"
    
    替换占位符为你的实际 MongoDB 信息,保存后重启 Next.js 开发服务器。

二、重构数据库连接逻辑(适配 App Router)

原连接代码是针对 Page Router 的 handler 包装,App Router 的 API 路由不适用,需改为独立连接函数:

  1. 在项目根目录创建 lib/mongodb.js 文件:
import mongoose from 'mongoose';

export async function connectDb() {
  // 检查是否已连接,避免重复连接
  if (mongoose.connections[0].readyState === 1) {
    return;
  }
  try {
    await mongoose.connect(process.env.MONGO_URI, {
      dbName: '你的数据库名称', // 可选,指定要连接的数据库
    });
    console.log('MongoDB 连接成功');
  } catch (err) {
    throw new Error(`数据库连接失败:${err.message}`);
  }
}

三、修复 User Schema 模块语法

原代码混用 CommonJS 和 ES 模块语法,导致导入错误,统一改为 ES 模块:
修改 models/User.js 文件:

import mongoose from 'mongoose';

const UserSchema = new mongoose.Schema(
  {
    name: { type: String, required: true },
    email: { type: String, required: true, unique: true },
    password: { type: String, required: true },
  },
  { timestamps: true }
);

// 避免热重载时重复创建模型
const User = mongoose.models.User || mongoose.model('User', UserSchema);

export default User;

四、在 API 路由中正确使用

修改 app/api/getProducts/route.js 文件(若使用 Page Router 则对应 pages/api/getProducts.js):

import { connectDb } from '../../../lib/mongodb';
import User from '../../../models/User';

export async function GET(request) {
  try {
    // 先建立数据库连接
    await connectDb();
    
    // 示例:查询用户数据(可替换为你的业务逻辑)
    // const products = await User.find({});
    // return new Response(JSON.stringify(products), {
    //   status: 200,
    //   headers: { 'Content-Type': 'application/json' }
    // });
    
    return new Response('Hello, Next.js!', { status: 200 });
  } catch (error) {
    return new Response(JSON.stringify({ error: error.message }), {
      status: 500,
      headers: { 'Content-Type': 'application/json' }
    });
  }
}

常见错误原因说明

  1. 模块语法冲突:原 User.js 中用 require 导入 Mongoose,却用 export default 导出模型,两种模块系统混用导致报错。
  2. 连接逻辑不适配:原 connectDb 是为 Page Router 的 API 路由设计的包装函数,App Router 的 API 路由直接导出 GET/POST 函数,无法使用该包装方式。
  3. 环境变量未加载:未在 .env.local 中正确配置 MONGO_URI,或未重启开发服务器导致变量未生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:47:31