בירור | nodejs תקינות פונקציה
-
האם הפונקציה הזו תקינה? או שחסרים/מיותרים בה דברים?
gpt מביא רשימה שאני ממש לא מסכים איתה.
אשמח לשמוע את דעתכם.הפונקציה מוסיפה מודעה, מוודאת שיש את הפרמטרים החובה ושהם תקינים, מוסיפה פרמטרי רשות אם ישנם ותקינים.
לאחר פרסום מודעה, מוסיפה לטבלת ערים מקושרת את ID המודעה ואת הערים שאליהם היא שייכת.// פונקציה להוספת מודעה חדשה למסד הנתונים export async function addAd(params) { let command = []; let placeholders = []; let values = []; // מחפש/מפרסם - חובה if (params.type && checkType(params.type)) { command.push("type"); placeholders.push("?"); values.push(params.type); } else { return { error: "Invalid type" }; } // מקצוע - חובה if (params.profession && checkProfession(params.profession)) { command.push(", profession"); placeholders.push(", ?"); values.push(params.profession); } else { return { error: "Invalid profession" }; } // טלפון - חובה if (params.phone && isValidIsraeliPhone(params.phone)) { command.push(", phone"); placeholders.push(", ?"); values.push(params.phone); } else { return { error: "Invalid phone number" }; } // מינימום/מקסימום מחיר - לא חובה, אבל אם קיים חייב להיות מספר חיובי ושלם if (params.price) { if (checkNumber(params.price)) { command.push((params.type === "מחפש") ? ", max_payment" : ", min_payment"); placeholders.push(", ?"); values.push(params.price); } else { return { error: "Invalid price" }; } } // תדירות צינתוק - חובה רק במחפש, אסור שיהיה במפרסם if (params.type === "מחפש") { if (params.ringMode && checkRingMode(params.ringMode)) { command.push(", ring_mode"); placeholders.push(", ?"); values.push(params.ringMode); } else { return { error: "Invalid ring mode" }; } } if (params.path) { command.push(", recording_path"); placeholders.push(", ?"); values.push(params.path); } let connection; connection = await mysql.createConnection({ host, user, password, database }); await connection.beginTransaction(); const [results] = await connection.execute(`INSERT INTO ads (${command.join('')}) VALUES (${placeholders.join('')})`, values ); // אזור - לא חובה, אבל אם קיים חייב להיות תקין if (params.area) { if (checkArea(params.area)) { const [results1] = await connection.execute(`INSERT INTO ad_cities (ad_id, city) VALUES (?, ?)`, [results.insertId, params.area]); await connection.commit(); return results1; } else { return { error: "Invalid area" }; } } // עיר - לא חובה, אבל אם קיים חייב להיות תקין else if (params.city) { if (Array.isArray(params.city)) { for (const city of params.city) { if (checkCity(city)) { await connection.execute(`INSERT INTO ad_cities (ad_id, city) VALUES (?, ?)`, [results.insertId, city]); } else { return { error: `Invalid city: ${city}` }; } } await connection.commit(); return { success: true }; } } else {const [results1] = await connection.execute(`INSERT INTO ad_cities (ad_id, city) VALUES (?, ?)`, [results.insertId, "all"]); await connection.commit(); return results1; } }בפורום אחר פשוט טענו שאני לא יודע js (מה שדי נכון, למדתי תוך כדי עבודה, לא לעומק).
יש למישהו תשובה יותר טובה? או שיוכל להסביר לי למה זה כ"כ גרוע בJS?עריכה: עשיתי שינויים קלים, לא משהו מהותי.
-
רק אבהיר כמה דברים.
- לא השתמשתי ב in (לדוגמא
if ("price" in params))
כי אין ערך שיכול להחשב כfalse והוא יעבור את הבדיקה שמתבצעת אח"כ, כך שלא אכפת לי שהוא יפול כבר שם.
-
השתמשתי במערכים ב", type" (פסיק רווח לפני שם הפרמטר) ולא בjoin פשוט, כך התרגלתי ואני לא רואה צורך להשתמש כרגע בjoin עם ", " למרות שזה לקריטי לי.
-
לא השתמשתי בpool לחיבורים למסד נתונים, כי אין הרבה בקשות... שיניתי משהו בקוד מקור ועכשיו יתכנו יותר בקשות, אז שיניתי גם לpool.
-
לא ישמתי ניהול חריגים כי הם נתפסים ע"י ספריה אחרת שאני משתמש בה, רק איפה שהייתי חייב שמתי catch שבתורו זורק error נוסף.
-
רק אבהיר כמה דברים.
- לא השתמשתי ב in (לדוגמא
if ("price" in params))
כי אין ערך שיכול להחשב כfalse והוא יעבור את הבדיקה שמתבצעת אח"כ, כך שלא אכפת לי שהוא יפול כבר שם.
-
השתמשתי במערכים ב", type" (פסיק רווח לפני שם הפרמטר) ולא בjoin פשוט, כך התרגלתי ואני לא רואה צורך להשתמש כרגע בjoin עם ", " למרות שזה לקריטי לי.
-
לא השתמשתי בpool לחיבורים למסד נתונים, כי אין הרבה בקשות... שיניתי משהו בקוד מקור ועכשיו יתכנו יותר בקשות, אז שיניתי גם לpool.
-
לא ישמתי ניהול חריגים כי הם נתפסים ע"י ספריה אחרת שאני משתמש בה, רק איפה שהייתי חייב שמתי catch שבתורו זורק error נוסף.
@עידו300 כתב בבירור | nodejs תקינות פונקציה:
השתמשתי במערכים ב", type" (פסיק רווח לפני שם הפרמטר) ולא בjoin פשוט, כך התרגלתי ואני לא רואה צורך להשתמש כרגע בjoin עם ", " למרות שזה לקריטי לי.
למרות שזה נראה לך כדבר פעוט,
זה משמעותי.במקרה שלך זה אולי לא יכול להיתקע,
אבל בעיקרון זה סתם מיותר שתכתוב כל פעם את ה, ברגע שJOIN עושה לך את זה.
ואם אתה רוצה לכתוב את זה כל פעם אז תשתמש בסטרינג שתשרשר אליו כל פעם עוד טקסטים,השילוב של השימוש במערך בלי לנצל את היכולת של מערך =

בהצלחה!!!
-
@עידו300 כתב בבירור | nodejs תקינות פונקציה:
השתמשתי במערכים ב", type" (פסיק רווח לפני שם הפרמטר) ולא בjoin פשוט, כך התרגלתי ואני לא רואה צורך להשתמש כרגע בjoin עם ", " למרות שזה לקריטי לי.
למרות שזה נראה לך כדבר פעוט,
זה משמעותי.במקרה שלך זה אולי לא יכול להיתקע,
אבל בעיקרון זה סתם מיותר שתכתוב כל פעם את ה, ברגע שJOIN עושה לך את זה.
ואם אתה רוצה לכתוב את זה כל פעם אז תשתמש בסטרינג שתשרשר אליו כל פעם עוד טקסטים,השילוב של השימוש במערך בלי לנצל את היכולת של מערך =

בהצלחה!!!
@יהודי-פשוט-וטוב שקלתי את הסטרינג אבל אני מגיע מעולם הnet ושם שרשור סטרינגים זה דבר לא טוב כי המהדר לא יודע לעבד סטרינג, בשביל זה יש מחלקה סטרינג בילדר, לכן "על אוטומט" אני לא מתעסק עם הרכבות סטרינגים.
אני משתמש במערך בשביל היכולת לשרשר אותו.
בכל מקרה, שיניתי, תודה.
-
@יהודי-פשוט-וטוב שקלתי את הסטרינג אבל אני מגיע מעולם הnet ושם שרשור סטרינגים זה דבר לא טוב כי המהדר לא יודע לעבד סטרינג, בשביל זה יש מחלקה סטרינג בילדר, לכן "על אוטומט" אני לא מתעסק עם הרכבות סטרינגים.
אני משתמש במערך בשביל היכולת לשרשר אותו.
בכל מקרה, שיניתי, תודה.
@עידו300
אל תתיאש!!JS היא לא שפה מורכבת בכלל..
-
@עידו300
אל תתיאש!!JS היא לא שפה מורכבת בכלל..
@יהודי-פשוט-וטוב תודה
אל תדאגה, אני לא מתיאש בכלל, רק מנסה להיות יותר טוב. איפה לא עשיתי מספיק נכון.