בירור | הרצת כמה סקריפטים במקביל
-
@עידו300 כן
ברגיל כל בקשה הראוטר מריץ את הפונקציה מחדש, אתה לא יכול לקרוא לres.json
פעמיים כי בעצם כבר החזרת תשובה, גמרנו. יש פה טריק מיוחד של הספריה שאין לי פנאי כרגע להסביר, אתה יכול לראות בקוד שלה.@צדיק-תמים ושאלה אחרונה (לבינתיים)
אני לא ממש יודע איך אני עושה 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 והראוטר?
-
@עידו300 כן
ברגיל כל בקשה הראוטר מריץ את הפונקציה מחדש, אתה לא יכול לקרוא לres.json
פעמיים כי בעצם כבר החזרת תשובה, גמרנו. יש פה טריק מיוחד של הספריה שאין לי פנאי כרגע להסביר, אתה יכול לראות בקוד שלה.@צדיק-תמים גם שמתי לב, שלא כמו בשפות שאני מכיר (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 והראוטר?
export async function editAd(call, adBase) { }
@עידו300 כתב בבירור | הרצת כמה סקריפטים במקביל:
@צדיק-תמים גם שמתי לב, שלא כמו בשפות שאני מכיר (C#) אין כאן פונקציה עיקרית (main) שהיא בעצם המהלך של הקוד, הכל קורה שם (ולא נדבר על מחלקות וכאלה) איך זה עובד בדיוק?
נכון, זה לפי הקובץ שאותו אתה מריץ, לדוגמה
node app.js
אז הקובץ הראשי זה app.js
-
export async function editAd(call, adBase) { }
@עידו300 כתב בבירור | הרצת כמה סקריפטים במקביל:
@צדיק-תמים גם שמתי לב, שלא כמו בשפות שאני מכיר (C#) אין כאן פונקציה עיקרית (main) שהיא בעצם המהלך של הקוד, הכל קורה שם (ולא נדבר על מחלקות וכאלה) איך זה עובד בדיוק?
נכון, זה לפי הקובץ שאותו אתה מריץ, לדוגמה
node app.js
אז הקובץ הראשי זה app.js
@צדיק-תמים (נכון שאמרתי אחרונה, אבל בכל זאת...) אז על כל פונקציה אני צריך לכתוב export (למרות שאני קורא לה רק בקובץ הזה, זה כאילו אותו מרחב לא?)? ואז בקוד הראשי לייבא את כל הפונקציות?
-
@צדיק-תמים (נכון שאמרתי אחרונה, אבל בכל זאת...) אז על כל פונקציה אני צריך לכתוב export (למרות שאני קורא לה רק בקובץ הזה, זה כאילו אותו מרחב לא?)? ואז בקוד הראשי לייבא את כל הפונקציות?
-
@עידו300 כתב בבירור | הרצת כמה סקריפטים במקביל:
למרות שאני קורא לה רק בקובץ הזה, זה כאילו אותו מרחב לא?
אין קשר בין הקבצים, כל פעם שאתה רוצה להשתמש בקוד מקובץ אחר אתה צריך לייצא ולייבא
@צדיק-תמים וואי זה יהיה בלאגן, להתחיל לייבא את כל הפונקציות עזר שיש שם, מכל הקבצים שיש לי.
אין דרך פשוט לשלוח את הבקשה לטיפול של הקובץ ההוא וזהו?
אני אשמח לראות קובץ אמיתי, לקבל תמונה של איך זה אמור להיראות.
תודה!
-
@צדיק-תמים וואי זה יהיה בלאגן, להתחיל לייבא את כל הפונקציות עזר שיש שם, מכל הקבצים שיש לי.
אין דרך פשוט לשלוח את הבקשה לטיפול של הקובץ ההוא וזהו?
אני אשמח לראות קובץ אמיתי, לקבל תמונה של איך זה אמור להיראות.
תודה!
-
@עידו300 זה הרגל טוב להפריד קוד לקבצים ולייבא רק את הנצרך. ובעיקר לצאת מהראש של סקריפטים ו"לזרוק את הבקשה מפה לשם"
שלחתי לעיל דוגמה, תכתוב שם משתמש בגיטאהב ואתן לך גישה לפרויקט קטן אמיתי.@צדיק-תמים כתב בבירור | הרצת כמה סקריפטים במקביל:
זה הרגל טוב להפריד קוד לקבצים ולייבא רק את הנצרך
אבל מראש אני כותב רק מה שנצרך, ואם אני עושה קובץ ראשי שיפנה את הבקשות, אז צריך לייבא הכל, לא? או שלא הבנתי עדיין את הקונספט.
פתחתי עכשיו משתמש בגיטהאב eido300-dot
עד עכשיו לא השתמשתי בזה... -
@צדיק-תמים כתב בבירור | הרצת כמה סקריפטים במקביל:
זה הרגל טוב להפריד קוד לקבצים ולייבא רק את הנצרך
אבל מראש אני כותב רק מה שנצרך, ואם אני עושה קובץ ראשי שיפנה את הבקשות, אז צריך לייבא הכל, לא? או שלא הבנתי עדיין את הקונספט.
פתחתי עכשיו משתמש בגיטהאב eido300-dot
עד עכשיו לא השתמשתי בזה... -
@עידו300 שלחתי לך
והנה דוגמה של עץ קבצים של פרויקט יותר גדול (עבור לקוח כך שאני לא יכול לשתף אותו)
@צדיק-תמים בספאם יש בקונטרולר 5 פונקציות ואתה מיצא רק 3, איך זה עובד? אני מניח שגם לשאר יש תפקיד ולא כתבת אותם משעמום...
האמת שהקוד שלי הרבה יותר ארוך... עם יותר פונקציות, אבל אולי אני סתם מאריך... לא יודע...
-
@צדיק-תמים בספאם יש בקונטרולר 5 פונקציות ואתה מיצא רק 3, איך זה עובד? אני מניח שגם לשאר יש תפקיד ולא כתבת אותם משעמום...
האמת שהקוד שלי הרבה יותר ארוך... עם יותר פונקציות, אבל אולי אני סתם מאריך... לא יודע...
-
@עידו300 הפונקציות המיוצאות הן מה שהמודול (הקובץ) חושף החוצה, והלא מיוצאות הן פונקציות פנימיות שהפונקציות המיוצאות משתמשות בהן כדי למנוע שכפול קוד, בידוד לוגיקה לצורך קריאות וכולי
@צדיק-תמים או מצוין.
אז אם יש לי קוד ארוך שמשתמש בכל מיני פונקצית עזר, אני מיצא רק את מה שהראוטר קורא לו.
כך שבקוד שבהודעה 59 אני צריך ליצא רק את הcallhandler, שם הכל קורה, שם קוראים לeditAd והdeleteAd
זה כבר נשמע יותר טוב.