#javascript #reactjs #mongodb #mongoose #next.js
Вопрос:
Проблема: Поэтому я пытаюсь интегрировать 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.'.
что мой подход к обработке этого состоял в том, чтобы кэшировать модель, чтобы она не была перезаписана, но не зря.
Комментарии:
1. Почему вы вызываете подключение к БД
Shop
?2. @GabrielLupu Мне нужна только одна связь. Так что лучше получить модель при подключении к БД.