اذهب إلى المحتوى
  • 0

ظهور الخطأ cannot overwrite "mongoose" model once compiled عند ربط mongoose مع nextjs

عبد النور محمد

السؤال

هذا هو الموديل الخاص بي

import mongoose from 'mongoose'

const flashcardItemSchema = new mongoose.Schema({
    term: {
        type:String,
        required: true,
        min:1
    },
    description: {
        type:String,
        required:true,
        min:1
    }
});
const FlashcardItem = mongoose.model("flashcardItem", flashcardItemSchema);

const flashcardSetSchema = new mongoose.Schema({
    title: {
        type: String,
        min: 1,
    },
    flashcards:[flashcardItemSchema],
})

const FlashcardSet = mongoose.model('flashcardSet', flashcardSetSchema )

export {FlashcardItem, FlashcardSet}

عند تشغيل المشروع أحصل على 

cannot overwrite "mongoose" model once compiled

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

وكطريقة مختصرة:

كي لايتم تعريف ال Schema مرتين في المشروع حيث أن Next تحاول بناء نسخة عند كل render

طبق نفس الفكرة لكل module تحاول بناءه المثال التالي لموديل user

module.exports = mongoose.models.Users || mongoose.model('Users', UsersSchema);

وبشكل عام، يوجد عدة احتمالات للخطأ

  1. استدعاء هذا الملف في مكانين مختلفين، مايؤدي لظهور خطأ أن هذا module معرف مسبقا.
  2. ربما تقوم بتعريف نفس Schema في مكان آخر لنفس Collection
  3. استعاء نفس النوذج بمكانين مختلفين بنفس المسار للدالة require
    require('./models/User') // file1
    
    require('./models/User') // file2

     

 

لتجنب حدوثها، يمكننا إعادة المستخدم المعرف مسبقاً إن وُجد بدل إنشاءه:

طبق هذه الفكرة على نماذجك..

let User;
try {
  User = mongoose.model("User");  // موجود
} catch {
  User = mongoose.model("User", userSchema); // نقوم بإنشاءه
}

إن كنت تستخدم serverless يمكنك تنفيذ أمر التشغيل كالتالي:

serverless offline --skipCacheInvalidation

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

الخطأ جاء من nextjs عند محاولة إعادة تشكيل النموذج في كل عملية render , عند محاولة حفظ نموذج في nextjs ، يجب كتابته على النحو التالي:

const modelName = mongoose.models.modelName || mongoose.model('modelName', flashcardSetSchema )  

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...