محمود سعداوي2 نشر 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 اقتباس
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 اقتباس
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 المسؤولة عن عرض أو اضافة معلومات خاصة بأكثر نم عنصر و ليس عنصر واحد فقط اقتباس
السؤال
محمود سعداوي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() }
لم أفهم سبب الخطأ لأني لم أستعمل الوسيط و لم أفهم كيف ظهرت رسالة الخطأ.
شكرا على المساعدة.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.