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

السؤال

نشر

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

في قاعدة البيانات 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
نشر
بتاريخ الآن قال 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...