Nextjs/Mongoose 模型在 nextjs 站点的某些(但不是其他)页面上未定义

问题描述 投票:0回答:1

我的 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
1个回答
0
投票

我只是想添加到这个讨论中,以防它对某人有帮助。

出现此问题的原因可能是我们在客户端或非服务器上下文中使用 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
用于客户端组件或页面时,它将是未定义的,除非您也在客户端组件或页面中创建模型的实例。

© www.soinside.com 2019 - 2024. All rights reserved.