try - catch טיפול בשגיאות בהוספת collaction למסד mongodb
-
שלום לכל החברים!
יש לי פרויקט ב- node.js עם express.js השומרת נתונים לתוך מסד של mongodb
כשאני מנסה להכניס פעמיים את אותו "_id" הוא זורק לי שגיאה כמו "לא ניתן להכניס מפתח כפול", ואז הוא סוגר לי את השרת. (עד כאן מובן).על מנת שלא יכבה לי את השרת, אני מנסה לתפוס את השגיאה עם try - catch, אך ללא הצלחה
הנה הקוד שלי אשמח אם מישהו יכוון אותי מה לא תקין:
app.get('/', cors(), (req, res, next) => { let p = req.query try { collections.insertMany([p]) console.log(p); } catch (error) { next(), console.log('myError is:', error); } }) -
שלום לכל החברים!
יש לי פרויקט ב- node.js עם express.js השומרת נתונים לתוך מסד של mongodb
כשאני מנסה להכניס פעמיים את אותו "_id" הוא זורק לי שגיאה כמו "לא ניתן להכניס מפתח כפול", ואז הוא סוגר לי את השרת. (עד כאן מובן).על מנת שלא יכבה לי את השרת, אני מנסה לתפוס את השגיאה עם try - catch, אך ללא הצלחה
הנה הקוד שלי אשמח אם מישהו יכוון אותי מה לא תקין:
app.get('/', cors(), (req, res, next) => { let p = req.query try { collections.insertMany([p]) console.log(p); } catch (error) { next(), console.log('myError is:', error); } })@katz אני משער שפונקציית
insertManyהיא פונקציה אסינכרונית (כלומר היא מחזירה מיד promise והפעולה עצמה קורה ברקע אחרי החזרה) ואם כן אי אפשר לתפוס את השגיאות על ידי try/catch רגיל אלא על ידי הצמדתcatchל-promise שהפונקציה מחזירה, ככה:app.get('/', cors(), (req, res, next) => { let p = req.query; collections.insertMany([p]).catch((error) => { next(), console.log('myError is:', error); }); console.log(p); });אפשריות נוספת היא להפוך את ה-handler לפונקציה אסינכרונית על ידי הוספת מילת
asyncלפני הצהרת הפונקציה. ואז אפשר לתפוס שגיאות בצורה דמוי סינכרונית אם תכתובawaitלפני הקריאה של הפונקציה:app.get('/', cors(), async (req, res, next) => { let p = req.query; try { await collections.insertMany([p]) console.log(p); } catch (error) { next(); console.log('myError is:', error); } })(חשוב שתבין מה עשיתי ובעיקר למה זה נצרך, ולא סתם לפתור את הבעיה על ידי העתקת הקוד התקין...)
אגב, יש הבדל בין שתי הגירסאות שכתבתי בנוגע לעיתוי של הקריאה ל-console.log(p).
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות