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

إصلاح خطأ ناتج عن عدم التعرف على _id الخاصة بمستخدم في mongodb

محمود سعداوي2

السؤال

السلام عليكم.

في قاعدة البيانات mongodb قمت بإنشاء العديد من المستخدمين و كل مستخدم لديه إسم و كلمة مرور و غير ذلك.

User Model

const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
        unique: true,
        maxlength: 20
    },
    username: {
        type: String,
        required: true,
        maxlength: 20
    },
    password: {
        type: String,
        required: true,
        minLength: 6
    },
    about: {
        type: String,
        maxlength: 100
    },
    avatar: String,
})

const User = mongoose.model('User', UserSchema)
module.exports = {
    User,
}

عند تسجيل مستخدم جديد mongodb تقوم بإسناد معرف وحيد _id

قمت بجلب جميع المستخدمين عدا المستخدم المسجل بالطريقة التالية:

// Get all users except the connected user
const getUsers = async(req,res) => {
    const userId = req.params.id
    try {
        const users = await User.find({ _id: { $ne: userId } }).select([
            "name",
            "username",
        ]);
        res.json(users);
    } catch (error) {
        console.log(error)
        res.status(500).send("Server error"); 
    }
}
// fetch users
  useEffect(()=> {
    const getUsers = async() => {
      try {
        const res = await axios.get(`/api/auth/allusers/${currentUser?._id}`)
        setUsers(res.data)
      } catch (error) {
        console.log(error.message)
      }
    }
    getUsers()
  },[currentUser?._id])

في طرف يظهر جميع المستخدمين لكن المشكل هو ظهور رسالة خطأ تشير إلى عدم التعرف _id

Capture.thumb.JPG.a649e06196262b86871f738a50f7bbfd.JPG

Capture2.thumb.JPG.96f600f030e348f986ffa911f306b5a2.JPG

شكرا على المساعدة

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

Recommended Posts

  • 0

يشير الخطأ الذي تواجهه إلى أن id الذي تحاول استخدامه في البحث غير معرف. مما يشير إلى مشكلة إلى استقباله في الطلب أساسا، أي في استخدام req.params.id وتفتقد قيمة id في الطلب أو تكون قيمتها غير معرفة (undefined).

حاول أولا التحقق مما إذا كان req.params.id معرفا أم لا قبل استخدامه:

const getUsers = async (req, res) => {
    const userId = req.params.id;
    if (!userId) {
        return res.status(400).send("لا يوجد هنالك معرف في الطلب");
    }
    
    try {
        const users = await User.find({ _id: { $ne: userId } }).select([
            "name",
            "username",
        ]);
        res.json(users);
    } catch (error) {
        console.log(error);
        res.status(500).send("Server error");
    }
}
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 29 دقائق مضت قال Adnane Kadri:

حاول أولا التحقق مما إذا كان req.params.id معرفا أم لا قبل استخدامه:

شكرا

نفس الخطأ دائما.

في الكونسول تظهر error.message في الدالة التالية

// fetch users
  useEffect(()=> {
    const getUsers = async() => {
      try {
        const res = await axios.get(`/api/auth/allusers/${currentUser?._id}`)
        setUsers(res.data)
      } catch (error) {
        console.log(error.message)
      }
    }
    getUsers()
  },[currentUser?._id])

 

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

  • 0
بتاريخ الآن قال محمود سعداوي2:

شكرا

نفس الخطأ دائما.

في الكونسول تظهر error.message في الدالة التالية

// fetch users
  useEffect(()=> {
    const getUsers = async() => {
      try {
        const res = await axios.get(`/api/auth/allusers/${currentUser?._id}`)
        setUsers(res.data)
      } catch (error) {
        console.log(error.message)
      }
    }
    getUsers()
  },[currentUser?._id])

 

حاول طباعة الرد من الخادم، هل يتم استقبال أي شيء؟

try {
   const res = await axios.get(`/api/auth/allusers/${currentUser?._id}`)
   console.log(res)
   // setUsers(res.data)
} catch (error) {
   console.log(error.message)
}

 

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

  • 0
بتاريخ 2 دقائق مضت قال Adnane Kadri:

حاول طباعة الرد من الخادم، هل يتم استقبال أي شيء؟

لم يحصل شيء في الكونسول حيث تمت طباعة res بنجاح

Capture3.JPG.d598e5f316af381dac71f3562f4de12c.JPG

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

  • 0
بتاريخ الآن قال محمود سعداوي2:

لم يحصل شيء في الكونسول حيث تمت طباعة res بنجاح

Capture3.JPG.d598e5f316af381dac71f3562f4de12c.JPG

يبدوا أنه لا يوجد أي مشكلة باستقبال البيانات في تطبيق العميل من على تطبيق الخادم، 

متى تظهر المشكلة اذن؟

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

  • 0
بتاريخ الآن قال Adnane Kadri:

يبدوا أنه لا يوجد أي مشكلة باستقبال البيانات في تطبيق العميل من على تطبيق الخادم، 

متى تظهر المشكلة اذن؟

رسالة الخطأ تظهر مباشرة بعد جلب المستخدمين

يعني تظهر أمامي جميع المستخدمين ثم تظهر رسالة الخطأ

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

  • 0
بتاريخ الآن قال محمود سعداوي2:

رسالة الخطأ تظهر مباشرة بعد جلب المستخدمين

يعني تظهر أمامي جميع المستخدمين ثم تظهر رسالة الخطأ

يرجح أنه يتم ارسال الطلبية أكثر من مرة أين يفشل الطلب بعد المرة الأولى لسبب ما، 

حاول تمرير مصفوفة فارغة للخطاف useHook كمعامل ثان وسوف يتم ارسال الطلبية عند التصيير الابتدائي initial render فقط. لاجتناب تكرار تنفيذ الشيفرة عند كل تغير لمتغير الحالة الممرر كمعامل ثان.

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

  • 0
بتاريخ 2 دقائق مضت قال Adnane Kadri:

حاول تمرير مصفوفة فارغة للخطاف useHook كمعامل ثان وسوف يتم ارسال الطلبية عند التصيير الابتدائي initial render فقط. لاجتناب تكرار تنفيذ الشيفرة عند كل تغير لمتغير الحالة الممرر كمعامل ثان.

في هذه فشل البرنامج في جلب المستخدمين

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...