使用 mongoose 时重新加载 nextjs 服务器时出错

Error while reloading nextjs server while using mongoose

我将 NextJS 与 Mongoose 一起用作我的框架。我看过一些为 Mongoose 实现缓存的教程,但是每当我在 NextJS 服务器为 运行 时对代码进行一些更改时,我都会收到此错误:

error - OverwriteModelError: Cannot overwrite `user` model once compiled.

我已经从这些链接中知道为什么会发生此错误:

这些是我的模式和猫鼬配置文件:

// Mongoose connection file
import mongoose from 'mongoose';
import { config } from 'dotenv';
config();

let { MONGODB_URI, MONGODB_DB } = process.env;
let cached = global.mongoose;

if (!cached)
  cached = global.mongoose = { conn: null, promise: null };

export async function connectToDatabase() {
  if (cached.conn)
    return cached.conn;

  if (!cached.promise) {
    /** @type {import('mongoose').ConnectOptions} */
    const opts = { dbName: MONGODB_DB };

    /** @type {import('mongoose')} */
    cached.promise = mongoose.connect(MONGODB_URI, opts).then(mongoose => {
      return mongoose;
    });
  }
  cached.conn = await cached.promise;

  return cached.conn;
}

// Mongoose schema file
import mongoose from 'mongoose';
import { connectToDatabase } from '../config/mongoose';

let db =  await connectToDatabase();
const userSchema = new mongoose.Schema({
    ...some schema
});

let User = db.model('user', userSchema);
export default User;

我无法弄清楚是什么导致了它以及如何解决它。

您收到此错误是因为每次您点击 api 端点时,猫鼬都是 re-compiling 模型。以这种方式更改模型文件。 现在,检查模型是否已经编译,否则使用它创建模型

此外,在 api 端点调用 connectDb()。

import mongoose from 'mongoose';

const userSchema = new mongoose.Schema({
    ...some schema
});

export default mongoose.models.user || mongoose.model('user', userSchema)