محمود سعداوي2 نشر 2 نوفمبر 2023 أرسل تقرير نشر 2 نوفمبر 2023 السلام عليكم. لحذف صورة من قاعدة البيانات قمت بالكود التالي Router router.delete("/user_images/:photoId", protect, removeImg); Controller const removeImg = async (req, res) => { try { const post = await Image.findById(req.params.photoId); if (!post) { return res.status(404).json({ msg: "Post Not Found" }); } // Check User if (post.user.toString() !== req.user.id) { return res.status(401).json({ msg: "User not authorized" }); } await post.remove res.json({ msg: "Post removed" }); } catch (err) { return res.status(404).json({ msg: "Post Not Found" }); res.status(500).send("Server error"); } }; الواجهة الأمامية const user = JSON.parse(localStorage.getItem("user")); const [photos, setPhotos] = useState([]); const handleRemove = async (id) => { await axios .delete(`/api/images/user_images/${id}`, { headers: { "Content-Type": "application/json", "x-auth-token": user?.data.token, }, }) .then(() => { setPhotos(photos.filter((p) => p._id.toString() !== id.toString())); }) .catch((err) => console.error(err)); }; عند النقر عى زر الحذف يقع حذف الصورة لكن عند تحديث الصفحة تعود الصورة. بالرجوع إلى قاعدة البيانات لاحظت أنه لم يتم حذف الصورة شكرا على المساعدة 1 اقتباس
0 Adnane Kadri نشر 2 نوفمبر 2023 أرسل تقرير نشر 2 نوفمبر 2023 بتاريخ الآن قال محمود سعداوي2: في هذه الحالة ظهرت رسالة الخطأز post.remove is not a function جرب استعمال findByIdAndRemove بدلا عن remove للحذف، انتبه الى تمرير المعامل اللازم: await Image.findByIdAndRemove(req.params.photoId) 1 اقتباس
0 Adnane Kadri نشر 2 نوفمبر 2023 أرسل تقرير نشر 2 نوفمبر 2023 المشكلة في الكود الخاص بك تكمن في السطر التالي: await post.remove; فبدلا من استخدام remove كخاصية سيجب عليك استعمالها كتابع: await post.remove(); احفظ الملف ثم انظر ما تم ذلك. 1 اقتباس
0 محمود سعداوي2 نشر 2 نوفمبر 2023 الكاتب أرسل تقرير نشر 2 نوفمبر 2023 بتاريخ 1 دقيقة مضت قال Adnane Kadri: remove() في هذه الحالة ظهرت رسالة الخطأز post.remove is not a function اقتباس
0 محمود سعداوي2 نشر 2 نوفمبر 2023 الكاتب أرسل تقرير نشر 2 نوفمبر 2023 بتاريخ 2 دقائق مضت قال Adnane Kadri: await Image.findByIdAndRemove(req.params.photoId) جربت هذا الكود await post.deleteOne() فتمت العملية بنجاح اقتباس
السؤال
محمود سعداوي2
السلام عليكم.
لحذف صورة من قاعدة البيانات قمت بالكود التالي
Router
router.delete("/user_images/:photoId", protect, removeImg);
Controller
const removeImg = async (req, res) => { try { const post = await Image.findById(req.params.photoId); if (!post) { return res.status(404).json({ msg: "Post Not Found" }); } // Check User if (post.user.toString() !== req.user.id) { return res.status(401).json({ msg: "User not authorized" }); } await post.remove res.json({ msg: "Post removed" }); } catch (err) { return res.status(404).json({ msg: "Post Not Found" }); res.status(500).send("Server error"); } };
الواجهة الأمامية
const user = JSON.parse(localStorage.getItem("user")); const [photos, setPhotos] = useState([]); const handleRemove = async (id) => { await axios .delete(`/api/images/user_images/${id}`, { headers: { "Content-Type": "application/json", "x-auth-token": user?.data.token, }, }) .then(() => { setPhotos(photos.filter((p) => p._id.toString() !== id.toString())); }) .catch((err) => console.error(err)); };
عند النقر عى زر الحذف يقع حذف الصورة لكن عند تحديث الصفحة تعود الصورة.
بالرجوع إلى قاعدة البيانات لاحظت أنه لم يتم حذف الصورة
شكرا على المساعدة
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.