בירור | הרצת כמה סקריפטים במקביל
-
@עידו300 אתה רוצה לפתור את הצורך הנקודתי אבל בלי ללמוד איך זה עובד? זכותך אבל זה לא מתאים לי, אם תלמד איך עובדת האסינכרוניות של נוד ואיך להשתמש באקספרס אשמח לענות על שאלות
@עידו300 כתב בבירור | הרצת כמה סקריפטים במקביל:
ובדיוק זו הבעיה...
זה לא הבעיה
@צדיק-תמים חחח, זה יפה שיש לך כאלו עקרונות, גם אני לא אוהב לעשות העתק-הדבק, אבל לפעמים צריך SOS פתרון ואח"כ יהיה זמן ללמוד את הנושא...
בכל מקרה עכשיו יש קשיים אחרים, הPM2 לא מריץ את זה, זאת אומרת כתוב אונליין אבל תכלס שניגשים לכתובת "וְאֵין קוֹל וְאֵין עֹנֶה וְאֵין קָשֶׁב".
כשמריצים כרגיל עם node *.js הכל טוב, אבל עם הPM2 לא... וגם כשמוסיפים & זה לא גורם לו להשאר אחרי שהטרמינל נסגר.אני כבר משתגע מזה, בושות מהלקוח, טוב שהוא עוד לא התקשר לקו לבדוק.
-
@עידו300 כתב בבירור | הרצת כמה סקריפטים במקביל:
gpt מתעקש על הדרך שהוא כתב.
תראו https://chatgpt.com/share/68f7352d-e9cc-8000-8072-3de179fe6480אתה צריך לצאת מהראש של סקריפטים בPHP ולעבור לראש של אפליקציה שרצה קבוע, זה לא שהראוטר "מריץ קובץ" JS לפי הנתיב (לא ברור למה נראה לך שזה טוחן מעבד, להיפך PHP הרבה יותר כבד, ואכמ"ל)
ממליץ על https://did.li/zg9Hwיש לך אגב בתחומים הרבה שרשורים דומים של מתכנתים שעברו מPHP לנוד והתקשו להבין את הגישה השונה
@צדיק-תמים כתב בבירור | הרצת כמה סקריפטים במקביל:
ממליץ על https://did.li/zg9Hw
התחלתי לראות, מאוד טוב אבל מניח ידע מוקדם, הוא לא מסביר את הבסיס של מה שעשה שם, שזה מה שחסר לי.
הוא מניח שכולם יודעים מה זה midlleware ומה זה app.get וapp.use מה זה ראוט. -
@צדיק-תמים כתב בבירור | הרצת כמה סקריפטים במקביל:
ממליץ על https://did.li/zg9Hw
התחלתי לראות, מאוד טוב אבל מניח ידע מוקדם, הוא לא מסביר את הבסיס של מה שעשה שם, שזה מה שחסר לי.
הוא מניח שכולם יודעים מה זה midlleware ומה זה app.get וapp.use מה זה ראוט. -
@עידו300 באיזה אחד אתה אוחז?
אני למדתי מזה בזמנו בלי ידע קודם, אז נראה לי שאתה פשוט צריך להמשיך@צדיק-תמים עכשיו צריך להתחיל את ה5
-
@עידו300 באיזה אחד אתה אוחז?
אני למדתי מזה בזמנו בלי ידע קודם, אז נראה לי שאתה פשוט צריך להמשיך@צדיק-תמים יצא לך להשתמש עם ראוטים רגילים בשילוב הספריה הזו? הכונה שהראוטר מעביר לעמוד אחר (מה שהוא עושה שם עם הimport מה controller), כאילו נראה לי משום מה שזה פשוט לא אמור לעבוד ביחד.
-
@צדיק-תמים יצא לך להשתמש עם ראוטים רגילים בשילוב הספריה הזו? הכונה שהראוטר מעביר לעמוד אחר (מה שהוא עושה שם עם הimport מה controller), כאילו נראה לי משום מה שזה פשוט לא אמור לעבוד ביחד.
-
@צדיק-תמים כתב בבירור | הרצת כמה סקריפטים במקביל:
@עידו300 למה לא?
אבל זה הראוטר של הספריה שלך, לא? לא של האקספרס
-
@צדיק-תמים כתב בבירור | הרצת כמה סקריפטים במקביל:
@עידו300 למה לא?
אבל זה הראוטר של הספריה שלך, לא? לא של האקספרס
-
לא הבנתי
import express, { json } from 'express'; import { YemotRouter } from 'yemot-router2'; import { fileURLToPath } from 'url'; import process from 'process'; export const app = express(); export const router = YemotRouter({ printLog: true,
צריך את כל הרשימה למעלה?
אני משתמש ב router כאן בתור הראוטר הרגיל? -
לא הבנתי
import express, { json } from 'express'; import { YemotRouter } from 'yemot-router2'; import { fileURLToPath } from 'url'; import process from 'process'; export const app = express(); export const router = YemotRouter({ printLog: true,
צריך את כל הרשימה למעלה?
אני משתמש ב router כאן בתור הראוטר הרגיל? -
@עידו300 כתב בבירור | הרצת כמה סקריפטים במקביל:
אני משתמש ב router כאן בתור הראוטר הרגיל?
כן, וכמו שראית בדוגמה שלי שאני משתמש ב middleware בצורה הרגילה או שאני עושה app.use למופע של הראוטר של הספריה
@צדיק-תמים אז אם אני מבין נכון:
החלק הזה:
פועל בכל בקשה שמגיעה לאפליקציה, זה כאילו מקום לביצוע פעולות/סינון לפני שהבקשה מגיעה לראוטר עצמו. (במקרה הזה בדיקה שהסיסמא נכונה/טוקן נכון, אני מניח)
וכאן:
כל בקשת get שעוברת את הסינון ובכתובת כתבו recordToCity מועברת ל(לא יודע איך לקרוא לזה) שנמצא בcontrollers/general/recordToCity?
זה מועבר אליו לראוטר שם? מפעיל את הפונקציה שלו? זה לא אמור לקבל פונקציה?
-
@צדיק-תמים אז אם אני מבין נכון:
החלק הזה:
פועל בכל בקשה שמגיעה לאפליקציה, זה כאילו מקום לביצוע פעולות/סינון לפני שהבקשה מגיעה לראוטר עצמו. (במקרה הזה בדיקה שהסיסמא נכונה/טוקן נכון, אני מניח)
וכאן:
כל בקשת get שעוברת את הסינון ובכתובת כתבו recordToCity מועברת ל(לא יודע איך לקרוא לזה) שנמצא בcontrollers/general/recordToCity?
זה מועבר אליו לראוטר שם? מפעיל את הפונקציה שלו? זה לא אמור לקבל פונקציה?
-
@עידו300 זה require בלי פירוק, אז
generalViews
זה אובייקט של כל הייצואים מהקובץ ההוא
ו-recordToCity
זה פונקציה אסינכרונית שמטפלת בשיחהבesm המקבילה היא
import * as generalViews from '...'
@צדיק-תמים ואז בעצם האפליקציה קוראת לפונקציה הזאת?
וזהבעצם require רק בלי לשים אותו במשתנה?
-
@צדיק-תמים ואז בעצם האפליקציה קוראת לפונקציה הזאת?
וזהבעצם require רק בלי לשים אותו במשתנה?
-
@עידו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 (למרות שאני קורא לה רק בקובץ הזה, זה כאילו אותו מרחב לא?)? ואז בקוד הראשי לייבא את כל הפונקציות?