使用 mongoose 时重新加载 nextjs 服务器时出错
Error while reloading nextjs server while using mongoose
我将 NextJS 与 Mongoose 一起用作我的框架。我看过一些为 Mongoose 实现缓存的教程,但是每当我在 NextJS 服务器为 运行 时对代码进行一些更改时,我都会收到此错误:
error - OverwriteModelError: Cannot overwrite `user` model once compiled.
我已经从这些链接中知道为什么会发生此错误:
- Cannot overwrite model once compiled Mongoose
- https://nesin.io/blog/fix-mongoose-cannot-overwrite-model-once-compiled-error
这些是我的模式和猫鼬配置文件:
// 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)
我将 NextJS 与 Mongoose 一起用作我的框架。我看过一些为 Mongoose 实现缓存的教程,但是每当我在 NextJS 服务器为 运行 时对代码进行一些更改时,我都会收到此错误:
error - OverwriteModelError: Cannot overwrite `user` model once compiled.
我已经从这些链接中知道为什么会发生此错误:
- Cannot overwrite model once compiled Mongoose
- https://nesin.io/blog/fix-mongoose-cannot-overwrite-model-once-compiled-error
这些是我的模式和猫鼬配置文件:
// 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)