תחביר הצבת נתונים לאובייקט JS
-
יש לי טבלת שאלות בד"ב ואני מושך אותך ומאכלס אותם לתוך משתנה בNODEJS.
הבעיה היא שבשרת אני צריך את הנתונים מהטבלה מפוצלים לפי משתמש.
הקושי הוא שאם אכתוב מיד את האכלוס לפי הסינון אני יקבל שגיאה שלא ניתן לאכלס לתוך משהו שעדיין לא קיים, לכן עשיתי בדיקה לפני האכלוס האם המערך קיים, אחרת הוא יוצר אותו ואז מאכלס.
הנה דוגמאUpDateQuestionsAndAnswers :function() { return database.selectSQL('SELECT * FROM `QuestionsAndAnswers`').then(function (QuestionsAndAnswers) { this['QuestionsAndAnswers'] = {}; for (let i in QuestionsAndAnswers) { if (!this['QuestionsAndAnswers'][QuestionsAndAnswers[i]['UserId']]){ this['QuestionsAndAnswers'][QuestionsAndAnswers[i]['UserId']] = {}; } this['QuestionsAndAnswers'][QuestionsAndAnswers[i]['UserId']][QuestionsAndAnswers[i].id] = QuestionsAndAnswers[i]; } }).catch(error => { console.error(error); }); },
האם יש דרך יותר קומפקטית?
וכן לפעמים אני צריך את הסינון לפי שתי עמודות בטבלה, כגון לפי משתמש ולכל משתמש למיין בתוכו לפי תאריך.
אז עד היום הייתי צריך ליצור תנאי נוסף לאחר התנאי הראשון, שבודק האם קיים מערך לתאריך המבוקש בתוך מערך המשתמש, ואחרת הוא יוצר אותו.
זה מסורבל, אני מתאר לעצמי שאמורות להיות דרכים יותר נקיות.
תודה -
מה שאני חושב (ועשיתי אצלי) זה להשתמש בORM.
מה זה?זה פריימוורק שיוצר אובייקטים לכל טבלה, וכך אתה פשוט מתנהל מול האובייקט.
אובייקט יוזר, יש לו מתודה של חפש יוזר, תביא את כל היוזרים, עדכן יוזר, וכו.
זה אומר בעצם לבנות את הכל מחדש.
לכל טבלה, אתה כותב מודל, שבעצם מסביר לפריימוורק מה הולך שם.
כמה שדות יש, וכל שדה, מה הוא אומר.זה ייקח זמן (וללמוד... בכלל), אבל אח"כ הכל ירוץ.
במקום לכתוב שאילתות כל הזמן, אתה פשוט עושה אינטואטיבית: יוזר->חפש אחד-> השם שלו מתחיל ב-מ'.קבל דוגמא מפרוייקט שלי (אגב אני בנוד חודש ומשהו, אל תבהל. לא קשה כזה):
שרת API: קבלת מפתח, והמרה שלו למשתמש:router.post("/get_name", async (req, res) => { let user = await User.findOne({ where: { key: req.body.key } }); if (!user) { res.result.massage = "key does not exist"; res.json(res.result); } else { res.user = user; next(); } });
כמה קל להתנהל מול הDB!
שורת קוד אחת!...אני משתמש ב https://sequelize.org/.
-
@MusiCode אמר בתחביר הצבת נתונים לאובייקט JS:
מה שאני חושב (ועשיתי אצלי) זה להשתמש בORM.
מוכר קצת, אני משתמש ב https://underscorejs.or
לעבוד עם מודולים אמיתיים מידי יקר עבורי..
אז באמת אני שם לב כעת שיש כאן אפשרות של indexBy.
אבל זה לא פותר כשאני צריך אינדקס בתוך אינדקס. -
@MusiCode אמר בתחביר הצבת נתונים לאובייקט JS:
אא"ט, זה אפשרי בתחביר המובנה של הפריימוורק.
כנראה התכוונת אאל"ט.
במה שאתה משתמש ניתן לקרוא פריימוורק, מה שאני משתמש זה מחלקה.בכל מקרה ניתן כנראה לקמבן אבל א"כ כבר ניתן בקלות יותר לעשות כמו שעשיתי עד היום, כמה מסובך ככה פשוט