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

sim*_*gor 1 mongoose mongodb reactjs next.js

我正在学习将 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
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)

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
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助。

Moh*_*adi 8

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

所以试试:

module.exports = mongoose.models.Note || mongoose.model("Note", NoteSchema);
Run Code Online (Sandbox Code Playgroud)

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