אם אנחנו רוצים למחוק רק רשומה אחת, זה קל… שלוחים לשרת את ה-ID שאנחנו רוצים למחוק ומשם זה די פשוט.
אבל מה קורה שרוצים למחוק מספר רשומות בפעולה אחת? זאת אומרת שאנחנו שולחים מערך של מספרי זיהוי או אובייקטים
ואנחנו צריכים לבדוק שאכן כל התהליך עבר תקין (או שלא) ורק אז להחזיר תשובה לצד הלקוח שתשקף את התוצאה.
אפשר לעשות את זה כך
exports.deleteExternalLinks = async (req, res, next) => {
Promise.all(
req.body.map(async (item) => {
await ExternalLinks.deleteOne({ _id: item.id });
})).then(() => {
res.status(200).json({
message: 'Delete completed'
});
}).catch(() => {
res.status(500).json({
message: 'Delete failed'
});
});
}- שורה 1 – נשתמש ב-async כדי לא לתפוס משאבים של צד שרת ללא צורך.
- שורה 2 – Promise.all – ממתין לתשובה מכל השאילתות ששלחנו ומספיק שאחת מהשאילתות תחזיר תשובה של שגיאה אז כל התהליך יחזיר תשובה של שגיאה.
- שורה 3 – מבצעים לולאה על המערך ושולחים שאילתות בתצורה async.
- שורה 4 – בגלל שהפונקציה היא async אנחנו יכולים וצריכים להשתמש ב-await לפני הביצוע, מחלצים את הזיהוי ומשתמשים בו כפילטר לרשומה המתאימה.
- אם אנחנו רוצים להחמיר ולעשות עוד בדיקות השוואה, אין בעיה, יש לנו את כל האובייקט ואנחנו יכולים להוסיף עוד פרמטרים לבדיקה וסינון.
- שורה 5 – כאשר כל התהליך הסתיים, ויש ל-promise תשובה (תקין/לא תקין) אפשר לשלוח תשובה חזרה למשתמש.
במקרה הזה מעניין אותי רק אם זה הצליח או לא, אבל אפשר יותר לחקור את התשובה לפרטים נוספים אם רוצים.
במקרה שהכל תקין, אנחנו מחזירים תשובה של 200 עם הודעה (אבל לא חייבים).
במקרה שיש כשלון, אנחנו מחזירים תשובה של 500 גם עם הודעה.
זה הכל 📯 , בהצלחה.





