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

Mongoose 7.0.1在Next.js 13.2.2中连接MongoDB时出现prototype读取错误

解决Mongoose导入时的「Cannot read properties of undefined (reading 'prototype')」错误

针对你用Mongoose 7.0.1 + Next.js 13.2.2 + React 18.2.0遇到的问题,结合Next.js 13 App Router的特性,给你几个针对性的解决方案:

  • 严格区分服务器/客户端代码边界
    Mongoose是Node.js端的数据库库,绝对不能在标注了'use client'的客户端组件中导入或使用。检查你的library/mongo/index.ts是否被客户端组件引用,如果有,必须把数据库操作逻辑完全迁移到服务器端(比如API路由、服务器组件、Server Actions)。

  • 用单例模式实现Mongoose连接适配Next.js缓存
    Next.js开发模式的热重载容易导致重复创建数据库连接,进而引发异常。调整连接代码为单例模式:

    // library/mongo/index.ts
    import mongoose from 'mongoose';
    
    const MONGODB_URI = process.env.MONGODB_URI!;
    
    if (!MONGODB_URI) {
      throw new Error('请在.env.local中配置MONGODB_URI环境变量');
    }
    
    // 利用全局变量缓存连接实例,避免重复连接
    let cached = global.mongoose;
    
    if (!cached) {
      cached = global.mongoose = { conn: null, promise: null };
    }
    
    export async function connectDB() {
      if (cached.conn) {
        return cached.conn;
      }
    
      if (!cached.promise) {
        const opts = {
          bufferCommands: false,
        };
    
        cached.promise = mongoose.connect(MONGODB_URI, opts).then(mongoose => {
          return mongoose;
        });
      }
      cached.conn = await cached.promise;
      return cached.conn;
    }
    
  • 禁用Edge Runtime(如果启用了)
    Mongoose目前不支持Next.js的Edge Runtime,检查你的app/api/route.ts,如果有export const runtime = 'edge'这行代码,直接删除即可(默认运行时为nodejs,完全兼容Mongoose)。

  • 验证TypeScript配置
    确保tsconfig.json的相关配置正确,ES6导入可正常工作:

    {
      "compilerOptions": {
        "module": "ESNext",
        "moduleResolution": "bundler",
        "target": "ES2020"
      }
    }
    

    不需要切换到CommonJS的require导入,Next.js会自动处理模块兼容。

  • 清除缓存后重新构建
    缓存可能导致依赖加载异常,执行以下命令清除缓存后重新构建:

    rm -rf .next node_modules/.cache
    npm run build
    

如果以上步骤仍未解决问题,建议检查app/api/route.ts中调用Mongoose的逻辑,确保是在服务器端函数(比如GET、POST)内部调用连接方法,而非在模块顶层直接执行。

内容的提问来源于stack exchange,提问作者Amari Willis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:15:18