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
Spark SQL SaveMode.Overwrite,获取 java.io.FileNotFoundException 并需要'REFRESH TABLE tableName'