【问题标题】:Mongoose NextJS OverwriteModelError: Cannot overwrite `Note` model once compiledMongoose NextJS OverwriteModelError:编译后无法覆盖`Note`模型
【发布时间】: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
    }
}

感谢您的帮助。

【问题讨论】:

    标签: reactjs mongodb mongoose next.js


    【解决方案1】:

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

    那就试试吧:

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

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

    【讨论】:

    • 多么拼写错误,我从来没有注意到这一点。非常感谢,这解决了我的问题。
    猜你喜欢
    • 2015-04-25
    • 2017-10-04
    • 2022-08-21
    • 2021-07-06
    • 2020-03-06
    • 2020-11-13
    • 2019-02-28
    • 2020-10-07
    • 2013-10-03
    相关资源
    最近更新 更多