דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. try - catch טיפול בשגיאות בהוספת collaction למסד mongodb

try - catch טיפול בשגיאות בהוספת collaction למסד mongodb

מתוזמן נעוץ נעול הועבר תכנות
2 פוסטים 2 כותבים 83 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • katzK מנותק
    katzK מנותק
    katz
    כתב ב נערך לאחרונה על ידי
    #1

    שלום לכל החברים!
    יש לי פרויקט ב- 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);
        }
      
    })
    

    מערכת שעות עבודה, https://timess.co.il/
    בלוג הקוד שלי: https://yossef7525.github.io/

    yossizY תגובה 1 תגובה אחרונה
    1
    • yossizY מנותק
      yossizY מנותק
      yossiz
      השיב לkatz ב נערך לאחרונה על ידי yossiz
      #2

      @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).

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      תגובה 1 תגובה אחרונה
      7

      בא תתחבר לדף היומי!
      • התחברות

      • אין לך חשבון עדיין? הרשמה

      • התחברו או הירשמו כדי לחפש.
      • פוסט ראשון
        פוסט אחרון
      0
      • דף הבית
      • קטגוריות
      • פוסטים אחרונים
      • משתמשים
      • חיפוש
      • חוקי הפורום