תתי הפניות ב express
-
@חוקר אז אתה צריך middleware, כתוב כך:
app.use('/ivr', (req, res, next)=>{ res.setHeader('Access-Control-Allow-Origin', '*') if(someCondition) res.send("המערכת סגורה") else next() }) app.use('/ivr/get_limud', (req, res)=>{ res.send('לימוד יומי') }) app.use('/ivr/get_maslul', (req, res)=>{ res.send('מסלול') })
כשאתה קורא לפונקציה next זה ממשיך הלאה לנתיבים הבאים, אם התקיים התנאי ולא קראת לה זה נעצר מיד
-
@יוסף-בן-שמעון אמר בתתי הפניות ב express:
@חוקר אז אתה צריך middleware, כתוב כך:
נראה לי שזה אכן מה שהייתי צריך!
תודה -
@יוסף-בן-שמעון אמר בתתי הפניות ב express:
if(someCondition) res.send("המערכת סגורה")
else next()לשם ההבנה, למה עשית את זה בתוך תנאי? כי ממ"נ אם אני עושה send או end זה אמור לסיים את הריצה, לא?
-
@חוקר אמר בתתי הפניות ב express:
@יוסף-בן-שמעון אמר בתתי הפניות ב express:
if(someCondition) res.send("המערכת סגורה")
else next()לשם ההבנה, למה עשית את זה בתוך תנאי? כי ממ"נ אם אני עושה send או end זה אמור לסיים את הריצה, לא?
כי אתה לא רוצה לסיים את ההתקשרות אם המערכת פתוחה.
-
@חוקר אמר בתתי הפניות ב express:
@אהרן אמר בתתי הפניות ב express:
כי אתה לא רוצה לסיים את ההתקשרות אם המערכת פתוחה.
אכן
התכוונתי לשאול בעיקר החלק השני, שלכאורה החלק שלelse next()
מיותר
אלא א"כ כפי שהוא כתב מקודם:
כשאתה קורא לפונקציה next זה ממשיך הלאה לנתיבים הבאים, אם התקיים התנאי ולא קראת לה זה נעצר מיד -
@חוקר אמר בתתי הפניות ב express:
@חוקר אמר בתתי הפניות ב express:
@אהרן אמר בתתי הפניות ב express:
כי אתה לא רוצה לסיים את ההתקשרות אם המערכת פתוחה.
אכן
התכוונתי לשאול בעיקר החלק השני, שלכאורה החלק שלelse next()
מיותר
אלא א"כ כפי שהוא כתב מקודם:
כשאתה קורא לפונקציה next זה ממשיך הלאה לנתיבים הבאים, אם התקיים התנאי ולא קראת לה זה נעצר מידנו
אתה שואל אם הוא צודק?אגב, אפשר לעשות גם כך
app.get('/ivr/get_limud', func1, func2) function func1(req, res, next) { //..... next(); } function func(req, res) { res.end('finish') }
זה לא מתאים לדוגמא הספציפית אבל דומה
-
@חוקר אמר בתתי הפניות ב express:
@אהרן אמר בתתי הפניות ב express:
כי אתה לא רוצה לסיים את ההתקשרות אם המערכת פתוחה.
אכן
התכוונתי לשאול בעיקר החלק השני, שלכאורה החלק שלelse next()
מיותר
כשאתה קורא ל
res.end()
אתה לא עוצר את הריצה של הפונקציה, אתה מסיים את התקשורת עם הקליינט, הפונקציה עצמה ממשיכה לרוץ, זה שני דברים שונים.
תנסה לדוגמא כך:res.end(); console.log("res is ended");
ותראה את ההדפסה בקונסול, אפשר לא רק להדפיס אלא לעשות כל דבר אחר, להתחבר למסד נתונים או למערכת קבצים או כל מה שתרצה, רק לא לשלוח עוד מידע לקליינט, לדוגמא אם תנסה כך:
res.end() res.write("hello")
תקבל שגיאה שהתקשורת כבר נסגרה ואז הפונקציה תכשל בגלל השגיאה.
אז אם לא תשים את זה בתוך else מה שיקרה שהפונקציה תמשיך ותקרא לשאר הנתיבים גם אם התקשורת כבר נסגרה, וזה יפלוט שגיאה.
-
@יוסף-בן-שמעון אמר בתתי הפניות ב express:
כשאתה קורא ל res.end() אתה לא עוצר את הריצה של הפונקציה, אתה מסיים את התקשורת עם הקליינט, הפונקציה עצמה ממשיכה לרוץ, זה שני דברים שונים.
מאה אחוז!
תודה על הלימוד