Mongoose NextJS OverwriteModelError:编译后无法覆盖`Note`模型

Posted

技术标签:

【中文标题】Mongoose NextJS OverwriteModelError:编译后无法覆盖`Note`模型【英文标题】:Mongoose NextJS OverwriteModelError: Cannot overwrite `Note` model once compiled 【发布时间】:2021-05-18 21:02:20 【问题描述】:

我正在学习将 Mongoose 与 NextJS 一起使用,但我一直遇到此错误。我已经查看了类似的问题,但没有弄清楚如何解决这个问题。我已经按照教程视频逐步实现 Mongoose,但在视频中没有出现这个问题。此外,我讨厌这样说不准确,但它只会“有时”发生。似乎每次我运行服务器的第一个 POST 请求总是通过,GET 请求也很好,但是当我尝试多个 POST 请求时它会发生。重新启动服务器后,它再次工作。这是我的代码:

import mongoose from "mongoose"

const connection = 

async function dbConnect() 
    if (connection.isConnected) 
        retrun
    

    const db = await mongoose.connect(process.env.MONGO_URI, 
        useNewUrlParser: true,
        useUnifiedTopology: true,
    )

    connection.isConnected = db.connections[0].readyState
    console.log(connection.isConnected)



export default dbConnect
const mongoose = require("mongoose")

let NoteSchema = new mongoose.Schema(
    email: 
        type: String,
        required: [true, "Please enter your email"]
    
)

module.exports = mongoose.model.Note || mongoose.model("Note", NoteSchema);

import dbConnect from "../../utils/dbConnect"
import Note from "../../models/Note"

dbConnect()

export default async (req, res) => 
    const  method  = req

    switch(method) 
        case "GET":
            try 
                const notes = await Note.find()

                res.status(200).json( success: true, data: notes )
             catch (error) 
                res.status(400).json( success: false )
            
            break
        case "POST":
            try 
                const note = await Note.create(req.body)

                res.status(201).json( success: true, data: note )
             catch (error) 
                res.status(400).json( success:false )
            
            break
        default:
            res.status(400).json( success:false )
            break
    

感谢您的帮助。

【问题讨论】:

【参考方案1】:

您应该使用mongoose.models.Note 而不是mongoose.model.Note

那就试试吧:

module.exports = mongoose.models.Note || mongoose.model("Note", NoteSchema);

此方法用于防止 Mongoose 编译后覆盖模型

【讨论】:

多么拼写错误,我从来没有注意到这一点。非常感谢,这解决了我的问题。

以上是关于Mongoose NextJS OverwriteModelError:编译后无法覆盖`Note`模型的主要内容,如果未能解决你的问题,请参考以下文章

Next JS / mongoose:在保存新对象之前将 ObjectId 分配到数组中

.create() on mongoose 模式错误,“此表达式不可调用”-TypeScript

如何使用 NestJS 命名法为猫鼬写下嵌套模式 [关闭]

linux中cp:overwrite提示的问题

Spark SQL SaveMode.Overwrite,获取 java.io.FileNotFoundException 并需要'REFRESH TABLE tableName'

不能在模块外使用 import 语句