Mongoose OverwriteModelError: Cannot overwrite `note` model once compiled.
错误详情
OverwriteModelError: Cannot overwrite note
model once compiled.
at Mongoose.model (E:\code\react\note\node_modules\mongoose\lib\mongoose.js:608:13)
at eval (webpack-internal:///(rsc)/./utils/model/Note.ts:8:114)
at (rsc)/./utils/model/Note.ts (E:\code\react\note.next\server\app\api\note\route.js:102:1)
at webpack_require (E:\code\react\note.next\server\webpack-runtime.js:33:42)
at eval (webpack-internal:///(rsc)/./app/api/note/route.ts:7:75)
at (rsc)/./app/api/note/route.ts (E:\code\react\note.next\server\app\api\note\route.js:82:1)
at webpack_require (E:\code\react\note.next\server\webpack-runtime.js:33:42)
背景
正准备开发一个个人博客,记笔记用的前端项目。使用nextjs前端框架+ Mongodb免费云数据库。
使用mongoose查询数据,新增数据都没问题。但是每次修改一两句代码,项目重新编译后,再新增数据,就会报上面错误!每天都能遇到奇怪的问题。。
分析解决
在网上逛了半天,很多的回答的解决办法都是如下:
import { models, model, now, Schema } from "mongoose";
const NoteSchema = new Schema({
author: String,
title: String,
content: String,
ctime: {type: Date, default: Date,now},
utime: {type: Date, default: Date,now},
type: {type: Number, default: 1},
view: Number
})
const Note = models.Note || model('note', NoteSchema)
export default Note
简答说明一下:先通过models.Note判断一下note这个model有没有创建,如果没有创建就走|| 后面代码,通过model创建名叫note的mode。
思路是这样,然后我的代码也是这样,根本没问题呀?完全没意识到我的代码哪里出错了!
运行代码继续报同样的错误,内心万马奔腾了,怎么天天都遇到棘手的问题?
终于经过我的不懈努力,在github发现一个有趣的回答,说是把model创建的名称改成大写!!!
我靠,还真行了。。
代码如下:
// 错误代码
const Note = models.Note || model('note', NoteSchema)
// 正确写法note -> Note
const Note = models.Note || model('Note', NoteSchema)
数据库里面,保存笔记数据的名字就是note,所以用model创建模型的时候我也用的note’字符串。完全没想到用大写!唉是真的无语,折腾了好几个小时,一整个下午+晚上都不开心,浪费了好多时间。
总结
也不知道怎么总结这个问题。。感觉就很无语,有没有大佬解释一下为什么?提前说声谢谢!