Javascript 如何在Next.js中正确使用Mongoose模型?
我正在用TypeScript和MongoDB/Mongoose构建Next.js应用程序。在使用Mongoose模型时,我开始遇到一个错误,这导致他们每次使用模型时都试图覆盖它 导致模型覆盖错误的代码:Javascript 如何在Next.js中正确使用Mongoose模型?,javascript,node.js,typescript,mongoose,next.js,Javascript,Node.js,Typescript,Mongoose,Next.js,我正在用TypeScript和MongoDB/Mongoose构建Next.js应用程序。在使用Mongoose模型时,我开始遇到一个错误,这导致他们每次使用模型时都试图覆盖它 导致模型覆盖错误的代码: 从“猫鼬”导入猫鼬; const{Schema}=mongoose; const categorySchema=新模式({ 名称:{type:String,必需:true}, 颜色:{type:String,必需:true} }) 导出默认mongoose.model('Category',ca
从“猫鼬”导入猫鼬;
const{Schema}=mongoose;
const categorySchema=新模式({
名称:{type:String,必需:true},
颜色:{type:String,必需:true}
})
导出默认mongoose.model('Category',categorySchema',categories')
我发现在许多使用Next.js和Mongoose的项目中,包括Next.js的示例项目,他们在导出时使用了以下语法来解决此问题:
导出默认mongoose.models.Category | | mongoose.model('Category',categorySchema,'categories'))
这感觉很奇怪,就像“绷带解决方案”一样,但乍一看似乎就奏效了;如果模型已经存在,则可以防止覆盖。然而,在使用TypeScript时,我开始遇到另一个问题,过了一段时间后,我发现正是这一行导致了这个问题。由于导出是finnicky,TypeScript无法解析类别模型,每当我尝试使用它的大多数属性或方法时,都会抛出错误。我更深入地研究了它,发现其他一些人通过这样做:
从“猫鼬”导入猫鼬;
const{Schema}=mongoose;
const categorySchema=新模式({
名称:{type:String,必需:true},
颜色:{type:String,必需:true}
})
接口类别字段{
名称:string,
颜色:字符串
}
类型CategoryDocument=mongoose.Document和CategoryFields
导出默认值(mongoose.models.Category为mongoose.Model)| | mongoose.Model('Category',categorySchema,'categories'))
再一次,这似乎起到了作用,但它只是在欺骗TypeScript,让它相信没有什么奇怪的事情发生,而事实上确实发生了
没有真正的解决方案来解决模型覆盖问题,而不跳过障碍,用其他错误覆盖错误吗
提前谢谢