محمود_سعداوي نشر 25 نوفمبر 2023 أرسل تقرير مشاركة نشر 25 نوفمبر 2023 السلام عليكم. في الكود التالي تظهر لي رسالة خطأ { "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() } لم أفهم سبب الخطأ لأني لم أستعمل الوسيط و لم أفهم كيف ظهرت رسالة الخطأ. شكرا على المساعدة. 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Mustafa Suleiman نشر 26 نوفمبر 2023 أرسل تقرير مشاركة نشر 26 نوفمبر 2023 الوسيط 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); }); 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Ahmed Elmrsawy نشر 30 نوفمبر 2023 أرسل تقرير مشاركة نشر 30 نوفمبر 2023 و عليكم السلام , ال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 المسؤولة عن عرض أو اضافة معلومات خاصة بأكثر نم عنصر و ليس عنصر واحد فقط اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
محمود_سعداوي
السلام عليكم.
في الكود التالي تظهر لي رسالة خطأ
{ "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() }
لم أفهم سبب الخطأ لأني لم أستعمل الوسيط و لم أفهم كيف ظهرت رسالة الخطأ.
شكرا على المساعدة.
رابط هذا التعليق
شارك على الشبكات الإجتماعية
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.