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

问题描述 投票:0回答:1

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

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 目录位于页面目录内。只有在重新编译页面后我才会收到错误。

mongodb mongoose next.js
1个回答
18
投票

事实证明,错误来自 nextjs 试图在每次渲染时重新制作模型。这里有一个答案:Mongoose/NextJS - 模型未定义/编译后无法覆盖模型 但我认为代码太长了,我的所有修复都只是一行。当尝试在 nextjs 中保存模型时,应该这样写:

const modelName = mongoose.models.modelName || mongoose.model('modelName', flashcardSetSchema )  
© www.soinside.com 2019 - 2024. All rights reserved.