我的 Next.js/mongoose 有一个奇怪的问题,我需要一些帮助来排除故障。当我将猫鼬模型导入 Next.js 站点的页面以在 getStaticProps 函数(例如
pages/index.js
或 pages/testimonies/index.js
或 pages/testimonies/[id].js
)中使用时,它工作正常。但是,由于某种原因,现在如果我将所述模型(或另一个不同的模型)导入其他页面集,例如 pages/vendors/index.js
或 pages/vendors[id].js
或 pages/whatever/whatever.js
我会收到以下错误(在任何页面上都没有收到)其他页面,我已经检查导入路径实际上是正确的):
TypeError: mongoose__WEBPACK_IMPORTED_MODULE_2___default().models is undefined
有人可以帮我解决到底是什么原因导致它突然损坏吗?例如,这里有两个有问题的模型(为了节省空间而进行了修剪),它们在提到的页面中工作正常,但现在似乎在其他地方都崩溃了:
const testimonySchema = new mongoose.Schema({
//stuff
});
export default mongoose.models.Testimony || mongoose.model('Testimony', testimonySchema);
import mongoose from 'mongoose';
import bcrypt from 'bcryptjs';
const vendorSchema = new mongoose.Schema({
//stuff
});
//some model functions
export default mongoose.models.Vendor || mongoose.model('Vendor', vendorSchema);
我只是想添加到这个讨论中,以防它对某人有帮助。
出现此问题的原因可能是我们在客户端或非服务器上下文中使用 Mongoose 模型。
我目前正在使用 Next.js 14。在我的例子中,我在布局中实例化模型,默认情况下用
use server
指令标记。
由于 Mongoose 模型是在服务器端实例化的,因此它们在客户端将不可用:
// User.ts
// @NOTE: To avoid OverwriteModelError, a model with the same collection name must not be reinitialized.
export const User: IUserModel = mongoose.models.user || mongoose.model<IUser, IUserModel>("user", UserSchema);
当
User
用于客户端组件或页面时,它将是未定义的,除非您也在客户端组件或页面中创建模型的实例。