首页 > 解决方案 > 无法解决猫鼬上的“模型一旦编译就无法覆盖”错误

问题描述

问题:所以我正在尝试将 MongoDB 集成到我的 nextJs 项目中。这是一个连接到数据库的库文件。

import shopSchema from './Schemas/shopSchema';
let shopModelCached;
async function getShopModel(connectionUrl) {
  if (!shopModelCached) {
    try {
      await mongoose.connect(process.env.MONGO_DB_CONNECTION_STRING);
      const Shop = mongoose.model("shop", shopSchema);
      shopModelCached = Shop;
    } catch (err) {
      throw err;
    }
  }
  return shopModelCached;
}

export default getShopModel;

当我getServerSidedProps在我的页面上调用该函数来获取我的商店模型时,它实际上什么都不做,只是调用上述函数来获取Shop模型,然后执行简单的查询来填充道具。

export async function getServerSideProps(context) {
  try {
    const Shop = await getShopModel(
      process.env.MONGO_DB_CONNECTION_STRING
    );
    const shop = await Shop.findOne({
      shopcode: context.params.shopname,
    }).exec();
    return {
      props: {
        shop,
      },
    };
  } catch (err) {
    throw err;
  }
}

当我重新编译模块时,这给我带来了错误。它说,'OverwriteModelError: Cannot overwrite 'shop' model once compiled.'.我处理这个问题的方法是缓存模型,这样它就不会被覆盖,但不会徒劳。

标签: javascriptreactjsmongodbmongoosenext.js

解决方案


推荐阅读