我正在使用 TypeScript 和 MongoDB/Mongoose 构建 Next.js 应用程序。我在使用 Mongoose 模型时开始遇到错误,这导致它们在每次使用模型时都尝试覆盖模型。
导致模型覆盖错误的代码:
import mongoose from 'mongoose';
const { Schema } = mongoose;
const categorySchema = new Schema({
name: {type: String, required: true},
color: {type: String, required: true}
})
export default mongoose.model('Category', categorySchema, 'categories')
Run Code Online (Sandbox Code Playgroud)
我发现在许多使用 Next.js 和 Mongoose 的项目中,包括 Next.js 的示例项目,他们在导出时使用以下语法来解决这个问题:
export default mongoose.models.Category || mongoose.model('Category', categorySchema, 'categories')
Run Code Online (Sandbox Code Playgroud)
这感觉很奇怪,有点像“创可贴解决方案”,但乍一看似乎很有效;如果模型已经存在,它可以防止覆盖。然而,使用 TypeScript 我开始遇到另一个问题,过了一段时间我发现这个问题是由那一行引起的。由于导出非常繁琐,TypeScript 无法解析类别模型,并且每当我尝试使用它的大部分属性或方法时都会抛出错误。我更深入地研究了它,发现其他一些人通过这样做来解决这个问题:
import mongoose from 'mongoose';
const { Schema } = mongoose;
const categorySchema = new Schema({
name: {type: String, required: true},
color: …Run Code Online (Sandbox Code Playgroud)