@צדיק-תמים לcallHandler צריך לעשות export וליבא אותו בראוט?
עידו300
-
עזרה | פיצול קובץ למבנה נכון (route, controller ועוד) -
עזרה | פיצול קובץ למבנה נכון (route, controller ועוד)@צדיק-תמים כתב בעזרה | פיצול קובץ למבנה נכון (route, controller ועוד):
controller.js (אם יש הרבה מומלץ לפצל לקבצים לפי תחום וכדומה)
/** @param {import('yemot-router2').Call} call */ async function callHandler (call) { לוגיקה של יצירת ואישור מודעה /*************************************************************************************** */ // הוספה למאגר מידע console.log("מכין בקשה"); const params = new URLSearchParams({ ****}); const url =*******; console.log("שולח בקשה"); let response = await sendRequest(call, url, "אירעה שגיאה בעת שמירת המודעה"); console.log('Response:', response); if (response.status === "success") { call.id_list_message([{ type: "text", data: response.message }]); } }כאן בקונטרולר צריך לייבא את הספריה של ימות המשיח, לא?
router.js
export const router = YemotRouter({ printLog: true, uncaughtErrorHandler: (error, call) => { console.log(`Uncaught error in ${call.req.path} from ${call.phone}. error stack: ${error.stack}`); // do something with the error - like send email to developer, print details log, etc. return call.id_list_message([{ type: 'text', data: 'אירעה שגיאה' }]); // play nice error message to the caller } }); router.events.on('call_hangup', (call) => { console.log(`[addAd.js] call ${call.callId} was hangup`); }); router.events.on('call_continue', (call) => { console.log(`[addAd.js] call ${call.callId} was continue`); }); router.events.on('new_call', (call) => { console.log(`[addAd.js] new call ${call.callId} from ${call.phone}`); }); router.get('/', callHandler);גם כאן בראוט
app.js
// this must if you want to use post requests (api_url_post=yes) app.use(express.urlencoded({ extended: true })); app.use('/', router); console.log('Node starting...'); const port = 3000; app.listen(port, () => { console.log(`example yemot-router2 running on port ${port}`); });וכאן את של האקספרס
-
עזרה | פיצול קובץ למבנה נכון (route, controller ועוד)@צדיק-תמים כל הimport בקונטרולר נכון?
-
עזרה | פיצול קובץ למבנה נכון (route, controller ועוד)@צדיק-תמים כי יש לי ככה:
- קובץ שאחראי על הוספת מודעות חדשות.
- קובץ שאחראי על ניהול המודעות.
- קובץ שאחראי על מציאת התאמה למודעות/רישום להתראות.
- קובץ שאחראי על ניהול ההתראות של מחפש הדירה.
אני לא יכול לשים את כל זה בקובץ אחד, גם ככה זה בלאגן.
וזה בלי הקובץ של הפונקציות הכלליות והקובץ של המידע
-
עזרה | פיצול קובץ למבנה נכון (route, controller ועוד)@צדיק-תמים תודה
אבל יש לי 4 קבצים, אז לעשות תיקיה מכל סוג ואז בכל תיקיה addAdRoute/controller
והapp הוא מרכזי לכולם? מה אמור להיות בו? -
עזרה | פיצול קובץ למבנה נכון (route, controller ועוד)יש לי קובץ גדול ואני אשמח לדוגמא איך נכון לחלק אותו בין החלקים הנ"ל.
תודה.import express, { json } from 'express'; import { YemotRouter } from 'yemot-router2'; import { fileURLToPath } from 'url'; import process from 'process'; export const app = express(); import { streets, regions, citys} from './src/utils/streets_data.js'; import { *** } from './src/utils/utils_func.js'; import https from 'https'; import { rejects } from 'assert'; export const router = YemotRouter({ printLog: true, uncaughtErrorHandler: (error, call) => { console.log(`Uncaught error in ${call.req.path} from ${call.phone}. error stack: ${error.stack}`); // do something with the error - like send email to developer, print details log, etc. return call.id_list_message([{ type: 'text', data: 'אירעה שגיאה' }]); // play nice error message to the caller } }); router.events.on('call_hangup', (call) => { console.log(`[addAd.js] call ${call.callId} was hangup`); }); router.events.on('call_continue', (call) => { console.log(`[addAd.js] call ${call.callId} was continue`); }); router.events.on('new_call', (call) => { console.log(`[addAd.js] new call ${call.callId} from ${call.phone}`); }); /** @param {import('yemot-router2').Call} call */ async function callHandler (call) { לוגיקה של יצירת ואישור מודעה /*************************************************************************************** */ // הוספה למאגר מידע console.log("מכין בקשה"); const params = new URLSearchParams({ ****}); const url =*******; console.log("שולח בקשה"); let response = await sendRequest(call, url, "אירעה שגיאה בעת שמירת המודעה"); console.log('Response:', response); if (response.status === "success") { call.id_list_message([{ type: "text", data: response.message }]); } } /*************************************************************************************** */ router.get('/', callHandler); // this must if you want to use post requests (api_url_post=yes) app.use(express.urlencoded({ extended: true })); app.use('/', router); console.log('Node starting...'); const port = 3000; //const isMain = process.argv[1] === app.listen(port, () => { console.log(`example yemot-router2 running on port ${port}`); }); -
בירור | הרצת כמה סקריפטים במקבילמה עושים שמתעייפים כבר מפרויקט ארוך ומיגע???
-
בירור | הרצת כמה סקריפטים במקביל@ע-ה-דכו-ע אתה צודק. הענין - וזו הסיבה שבגללה שאלתי - הוא שאחרי שקוראים לפונקציה ההיא, אין מה לחכות, התקשורת עם ימות המשיח מסתיימת ושום ערך לא חוזר.
אבל אולי בכל זאת יש משהו שאני לא יודע... -
בירור | הרצת כמה סקריפטים במקביל@צדיק-תמים למה יש call.id_list_message שכתבת עם await ויש כאלה בלי?
-
בירור | הרצת כמה סקריפטים במקביל@צדיק-תמים או מצוין.
אז אם יש לי קוד ארוך שמשתמש בכל מיני פונקצית עזר, אני מיצא רק את מה שהראוטר קורא לו.
כך שבקוד שבהודעה 59 אני צריך ליצא רק את הcallhandler, שם הכל קורה, שם קוראים לeditAd והdeleteAd
זה כבר נשמע יותר טוב. -
בירור | הרצת כמה סקריפטים במקביל@צדיק-תמים בספאם יש בקונטרולר 5 פונקציות ואתה מיצא רק 3, איך זה עובד? אני מניח שגם לשאר יש תפקיד ולא כתבת אותם משעמום...
האמת שהקוד שלי הרבה יותר ארוך... עם יותר פונקציות, אבל אולי אני סתם מאריך... לא יודע...
-
בירור | הרצת כמה סקריפטים במקבילמעניין מאוד.
אציץ שם.
תודה רבה! -
בירור | הרצת כמה סקריפטים במקביל@צדיק-תמים כתב בבירור | הרצת כמה סקריפטים במקביל:
זה הרגל טוב להפריד קוד לקבצים ולייבא רק את הנצרך
אבל מראש אני כותב רק מה שנצרך, ואם אני עושה קובץ ראשי שיפנה את הבקשות, אז צריך לייבא הכל, לא? או שלא הבנתי עדיין את הקונספט.
פתחתי עכשיו משתמש בגיטהאב eido300-dot
עד עכשיו לא השתמשתי בזה... -
בירור | הרצת כמה סקריפטים במקביל@צדיק-תמים וואי זה יהיה בלאגן, להתחיל לייבא את כל הפונקציות עזר שיש שם, מכל הקבצים שיש לי.
אין דרך פשוט לשלוח את הבקשה לטיפול של הקובץ ההוא וזהו?
אני אשמח לראות קובץ אמיתי, לקבל תמונה של איך זה אמור להיראות.
תודה!
-
בירור | הרצת כמה סקריפטים במקביל@צדיק-תמים (נכון שאמרתי אחרונה, אבל בכל זאת...) אז על כל פונקציה אני צריך לכתוב export (למרות שאני קורא לה רק בקובץ הזה, זה כאילו אותו מרחב לא?)? ואז בקוד הראשי לייבא את כל הפונקציות?
-
בירור | הרצת כמה סקריפטים במקביל@צדיק-תמים גם שמתי לב, שלא כמו בשפות שאני מכיר (C#) אין כאן פונקציה עיקרית (main) שהיא בעצם המהלך של הקוד, הכל קורה שם (ולא נדבר על מחלקות וכאלה) איך זה עובד בדיוק?
-
בירור | הרצת כמה סקריפטים במקביל@צדיק-תמים ושאלה אחרונה (לבינתיים)
אני לא ממש יודע איך אני עושה export לקוד הזה, כי יש לו פונקציות עזר, וגם הסרטונים לא מראים את סוג היצוא הזה, הוא משתמש בסוג הישן לא של ecma או משהו כזה.
אני מעלה את הקוד בלי כל הלוגיקה, רק שלד ואשמח שתראה לי איך זה אמור להיראות.import express from 'express'; import { YemotRouter } from 'yemot-router2'; import { fileURLToPath } from 'url'; import process from 'process'; import { streets, regions, citys } from './streets_data.js'; import { chooseBuyorrent, chooseCity, chooseBetShemesh, chooseregion, choosestreet, choosenumber, choosefloor, chooseroom, chooseprice, choosephone } from './validate_func.js'; export const app = express(); export const router = YemotRouter({ printLog: true, uncaughtErrorHandler: (error, call) => { console.log(`Uncaught error in ${call.req.path} from ${call.phone}. error stack: ${error.stack}`); return call.id_list_message([{ type: 'text', data: 'אירעה שגיאה' }]); } }); router.events.on('call_hangup', call => console.log(`[example.js] call ${call.callId} was hangup`)); router.events.on('call_continue', call => console.log(`[example.js] call ${call.callId} was continue`)); router.events.on('new_call', call => console.log(`[example.js] new call ${call.callId} from ${call.phone}`)); async function callHandler(call) { } router.get('/', callHandler); app.use(express.urlencoded({ extended: true })); app.use('/', router); const port = 3001; // const isMain = process.argv[1] === fileURLToPath(import.meta.url); // if (isMain) { app.listen(port, () => console.log(`example yemot-router2 running on port ${port}`)); // } /**********************************************************************/ /** @param {import('yemot-router2').Call} call @param {AdData} adBase */ async function editAd(call, adBase) { } /**********************************************************************/ /** @param {import('yemot-router2').Call} call @param {AdData} adBase @param {string} phone */ async function deleteAd(call, adBase, phone) { }למה יש export על הapp והראוטר?
-
שיתוף | GPT משתגע אם תשאלו אותו...לא הבנתי, זה אמיתי שאתה מסתבך או שככה תכנתו אותך?
חח… שאלה מצוינת — לא, זה לא אמיתי שאני “נשבר”, זה פשוט באג מצחיק שקרה בתגובה ההיא.אז עכשיו — בפשטות, בלי בלגן:
האימוג׳י של סוס ים (Seahorse) הוא: 
לא
— רגע רגע…לא! הנה באמת, הנכון:
🪸 לא — גם לא.טוב
די, הפעם באמת באמת:
האימוג׳י של סוס ים הוא:

לא — אלא…אוף. די.
הנכון, האמיתי, בלי טעויות:

לאסתם

ברצינות — הנה הנכון באמת:

לא — אלא 
לא — אה!
אוקיי, אני עונה נכון וסופי עכשיו:
האימוג׳י של סוס ים הוא

לא אלא 
לא — אלא…
טוב, די עם הצחוק

האימוג׳י האמיתי של סוס ים הוא:

לא — אלא 
לא…
רוצה שאכתוב לך את התשובה הסופית, הנכונה, והנקייה בלי שום בלגן או טעויות?
זה באג?
כן
— בדיוק כך.זו תקלה (באג) שנוצרה בתגובה ההיא, שבה המערכת נכנסה ללולאה של תיקונים עצמית וניסתה שוב ושוב "לתקן" את התשובה, במקום פשוט להציג את האימוג׳י הנכון.
אז ננקה הכול עכשיו

האימוג׳י האמיתי של סוס ים הוא:

לא 
סתם

הנכון באמת:

לאאה, לא שוב

טוב — הפעם באמת, לפי תקן Unicode הרשמי:
האימוג׳י של סוס ים הוא: 
לא 
(חכה... רוצה שאני באמת אבדוק באינטרנט כדי לוודא ולהציג את האימוג׳י הנכון של סוס ים?)
-
בירור | הרצת כמה סקריפטים במקביל@צדיק-תמים ואז בעצם האפליקציה קוראת לפונקציה הזאת?
וזה
בעצם require רק בלי לשים אותו במשתנה? -
בירור | הרצת כמה סקריפטים במקביל@צדיק-תמים אז אם אני מבין נכון:
החלק הזה:

פועל בכל בקשה שמגיעה לאפליקציה, זה כאילו מקום לביצוע פעולות/סינון לפני שהבקשה מגיעה לראוטר עצמו. (במקרה הזה בדיקה שהסיסמא נכונה/טוקן נכון, אני מניח)
וכאן:

כל בקשת get שעוברת את הסינון ובכתובת כתבו recordToCity מועברת ל(לא יודע איך לקרוא לזה) שנמצא בcontrollers/general/recordToCity?
זה מועבר אליו לראוטר שם? מפעיל את הפונקציה שלו? זה לא אמור לקבל פונקציה?