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

السؤال

نشر

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

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

{
    "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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...