我通过 mongoose 连接到 mongodb,然后创建一个模型,如下所示。
// coming from /database/schema
import mongoose from "mongoose";
const kittySchema = new mongoose.Schema({
name: String
})
const Kitten = mongoose.model("Kitten", kittySchema)
export default Kitten;
这是我第一次能够插入到数据库中。
如果我尝试第二次插入,则会出现以下错误。
OverwriteModelError: Cannot overwrite
Kitten
model once compiled.
这是因为我正在尝试重新插入已经存在的模型。因此,为了修复此错误,我添加了如下检查。
const Kitten = mongoose.model('Kitten') || mongoose.model("Kitten", kittySchema)
这段时间我在本地启动了服务器一次,并在热重载时修复了错误。
现在一切正常。可以多次插入。但现在如果我停止服务器并重新启动,我最终会出现以下错误。
MissingSchemaError: Schema hasn't been registered for model "Kitten". Use mongoose.model(name, schema)
这就是问题所在。它不喜欢修复:mongoose.model('Kitten') ||
为什么我在服务器开启时添加就可以了。但是在我停止并启动服务器后现在面临这个错误?
P.S:不相信以下内容是相关的。这就是我连接和插入的方式。
在需要时添加它们。
// coming from /database/connection
import mongoose from "mongoose";
const connection = async () => {
await mongoose.connect(process.env.DB_CONNECTION_STRING)
console.log('Database connected')
}
export default connection;
import connection from "../database/connection";
import Kitten from "../database/schema";
const saveKittens = (req, res) => {
connection()
.catch(error => console.log(`saveKittens error ${error}`))
const create = new Kitten({ name: 'test123' })
create.save().then(() => {
res.status(200).json(create)
})
}
export default saveKittens;
最佳答案
尝试将模型声明更改为:
const Kitten = mongoose.models?.Kitten || mongoose.model("Kitten", kittySchema)
它将返回已定义的模型(如果存在),否则声明一个新模型。
关于javascript - 热重载期间识别的模型,仅在服务器重新启动后失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73422083/