使用 Nextjs 编译后无法覆盖猫鼬模型

时间:2021-04-11 08:41:52

标签: mongodb mongoose next.js

在你关闭这个问题之前,我已经阅读了几个与我有相同问题的论坛,但我的问题截然不同。即使我不尝试做任何事情,甚至保存模型,它仍然给我一个错误:

cannot overwrite "mongoose" model once compiled

我觉得我的模式有问题,因为当它仍然更简单时,它工作得很好,但是当我试图让它更复杂时,它开始给我错误。这是我的猫鼬代码:

import mongoose from 'mongoose'

const flashcardItemSchema = new mongoose.Schema({
    term: {
        type:String,
        required: true,
        min:1
    },
    description: {
        type:String,
        required:true,
        min:1
    }
});
const FlashcardItem = mongoose.model("flashcardItem", flashcardItemSchema);

const flashcardSetSchema = new mongoose.Schema({
    title: {
        type: String,
        min: 1,
    },
    flashcards:[flashcardItemSchema],
})

const FlashcardSet = mongoose.model('flashcardSet', flashcardSetSchema )

export {FlashcardItem, FlashcardSet}

我在服务器运行时连接到我的数据库,所以它不会不时断开连接。

更新

我意识到我正在使用 nextjs 内置 api,这意味着 api 目录在页面目录中。我只在页面重新编译后收到错误。

1 个答案:

答案 0 :(得分:1)

所以事实证明错误来自 nextjs 试图在每次渲染时重新制作模型。这里有一个答案:Mongoose/NextJS - Model is not defined / Cannot overwrite model once compiled 但我认为代码太长了,所有修复我的只是一行。尝试在nextjs中保存模型时,应该这样写:

const modelName = mongoose.models.modelName || mongoose.model('modelName', flashcardSetSchema )