Mongoose OverwriteModelError: Cannot overwrite `note` model once compiled.

6 篇文章 0 订阅

错误详情

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’字符串。完全没想到用大写!唉是真的无语,折腾了好几个小时,一整个下午+晚上都不开心,浪费了好多时间。

总结

也不知道怎么总结这个问题。。感觉就很无语,有没有大佬解释一下为什么?提前说声谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值