javascript - 热重载期间识别的模型,仅在服务器重新启动后失败

标签 javascript mongodb mongoose next.js

我通过 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/

相关文章:

mongodb - 查询数组大小大于 1 的文档

node.js - 查找插入 mongoose 的最新子文档的 id

javascript - 一旦屏幕通过特定点或 jsx 标签,如何获取滚动事件?

javascript - 使用 Jasmine : how to remove or modify spyOn 进行 Angular 单元测试

json - 如何仅使用 mongo-java-driver 执行 MongoDB native 查询(JSON)?

c# - 查找 MongoDB 文档并仅匹配带有 C# 驱动程序的数组元素

node.js - 如何访问 mongoose.js 中的 oplog?

mysql - 使用 mySQL 和 Mongodb 进行 Node 循环插入

javascript - woody 的 WordPress 简码不起作用

javascript - 如何在 JavaScript 中将 JSON 键保留为字符串