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

مشكل في جلب البيانات من الخادم

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

السؤال

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

في الكود التالي تظهر لي رسالة خطأ 

{
    "message": "Invalid Id"
}

الكود

/**-----------------------------------------------
 * @desc    Get Posts Count
 * @route   /api/posts/count
 * @method  GET
 * @access  public
 ------------------------------------------------*/
 const getPostCountCtrl = asyncHandler(async (req, res) => {
  const countPosts = await Post.count();
  console.log(countPosts)
  res.status(200).json(countPosts);
});
**********************************************************
//  /api/posts/count
router.get("/count", getPostCountCtrl)

رسالة الخطأ التي سبق أن ذكرتها تظهر فقط عند إستعمال الوسيط التالي (validateObjectId)

module.exports = (req, res, next) => {
    if (!mongoose.Types.ObjectId.isValid(req.params.id)) {
        return res.status(400).json({message: "Invalid Id"})
    }
    next()
}

لم أفهم سبب الخطأ لأني لم أستعمل الوسيط و لم أفهم كيف ظهرت رسالة الخطأ.

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

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

Recommended Posts

  • 0

 الوسيط validateObjectId يقوم بفحص قيمة المُعامل req.params.id للتحقق من قيمة ObjectId وإن لم تكن القيمة صالحة، فسيُرجع الوسيط استجابة HTTP 400 مع رسالة خطأ Invalid Id.

حاول تفقد أين تقع المشكلة، من خلال عرض المزيد من المعلومات كالتالي:

module.exports = (req, res, next) => {
    if (!mongoose.Types.ObjectId.isValid(req.params.id)) {
        return res.status(400).json({ message: "Invalid Id", invalidId: req.params.id });
    }
    next();
};

أيضًأ هنا:

const getPostCountCtrl = asyncHandler(async (req, res) => {
    console.log("Request params:", req.params);
    const countPosts = await Post.count();
    console.log("Count posts:", countPosts);
    res.status(200).json(countPosts);
});

 

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

  • 0

و عليكم السلام ,
الmiddleware validateObjectId يستوجب وجود id في الrequest params 
 

module.exports = (req, res, next) => {
    if (!mongoose.Types.ObjectId.isValid(req.params.id)) {  
// يفحص إذا كان الid مناسب مع mongoose من حيث الlength مثلا و غيرها من المواصفات/ 
        return res.status(400).json({message: "Invalid Id"})
    }
    next()
}

وفي الcontroller getPostCountCtrl
لا تحضر معلومات عنصر واحد بid واحد 
بل تحضر معلومة عن كل العناصر لذلك فعند أستدعائك لها لا يوجد id في الrequest params و هو ما يسبب المشكلة 
و الحل أن تحذف الmiddleware  validateObjectId منها و من كل الcontrollers المسؤولة عن عرض أو اضافة معلومات خاصة بأكثر نم عنصر و ليس عنصر واحد فقط

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...