שאלות של מתחיל - מקצועי ב nodejs
-
@dovid @יוסף-בן-שמעון
איך אני יכול לשלוף נתונים נתונים מתוך אתר אחר ולהחזיר אותם לתוך משתנה?
משהו בצורתvar datafromurl = fetch('https://github.com/'); if (datafromurl = "ok"){ res.end(datafromurl); } else{ res.end("no"); }
לא הצלחתי להחזיר את הנתונים לתוך משתנה.
אשמח לעזרה בהקדם.
תודה -
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
נוד היא סינכרונית, כלומר כשאתה שולח בקשה לשרת מרוחק המעבד ממתין לתשובה, בנתיים הקומפיילר לא מחכה אלא ממשיך לשורה הבאה, ועד שהתשובה מגיעה הוא כבר אוחז כמה שורות אח"כ ולכן הוא לא טוען את התשובה למשתנה.
הפתרון היא לעבוד עם callback או עם promise, לדוגמא במודול שאתה משתמש יש פרומיס מובנה, תראה כאן:
https://www.npmjs.com/package/node-fetch#plain-text-or-htmlfetch('https://github.com/') .then(res => res.text()) .then(body => console.log(body));
then הראשון ממיר את התשובה מאובייקט לטקסט, ומחזיר אותו ל then השני, ובשני אתה יכול לשלוח את התשובה לאיפה שאתה רוצה. משהו כזה:
app.get('/page', (req, res)=>{ fetch('https://github.com/') .then(response => response.text()) .then(body =>{ if (body = "ok"){ res.end(body); } else{ res.end("no"); } }); })```
-
@יוסף-בן-שמעון
תודה.
השאלה היא האם שייך כן לארוז את זה כפונקציה, כי אני רוצה לקבל json ולטפל אותו לנתח נתונים לתוך משתנים ועוד.
אני צריך אפשרות לקבל בסגנון שכתבתי בהתחלה.
יש מצב?
תודה -
@יוסף-בן-שמעון אמר בשאלות של מתחיל - מקצועי ב nodejs:
הפתרון היא לעבוד עם callback או עם promise, לדוגמא במודול שאתה משתמש יש פרומיס מובנה
מה זה פרומיס?
-
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
@יוסף-בן-שמעון אמר בשאלות של מתחיל - מקצועי ב nodejs:
הפתרון היא לעבוד עם callback או עם promise, לדוגמא במודול שאתה משתמש יש פרומיס מובנה
מה זה פרומיס?
-
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
@יוסף-בן-שמעון
תודה.
השאלה היא האם שייך כן לארוז את זה כפונקציה, כי אני רוצה לקבל json ולטפל אותו לנתח נתונים לתוך משתנים ועוד.
אני צריך אפשרות לקבל בסגנון שכתבתי בהתחלה.
יש מצב?
תודהאתה יכול במקום לכתוב
res.text()
להחליף ל
res.json()
ואז בפונקציה השניה אתה מקבל את הbody כ JSON
אגב יש מודול יותר פופולרי לבקשות משרתים מרוחקים, קוראים לו request, אתה יכול להתקין כךnpm i request
ולהשתמש כך:
var request = require('request'); app.get('/page', (req, res)=>{ request('https://github.com/', (err, response, body)=>{ body = JSON.parse(body); if(body.status == "ok") res.send("ok") else res.send("no") }) })
-
@יוסף-בן-שמעון
מצאתי את מה שרציתי..
https://www.npmjs.com/package/sync-request -
פוסט זה נמחק!
-
@dovid אמר בשאלות של מתחיל - מקצועי ב nodejs:
@חוקר אתה ממש ממש טועה.
אתה מנסה לכופף את האוטו ללמוד לעבוד עם סוסים, היחיד שמפסיד זה אתה.
היית יכול להכביר בשאלות, נענה לך בל"נ על הכל, רק אל תכפיף את המנטליות של nodejs האסינכרונית להרגלים שלך (אני גם השתגעתי, מבטיח לך).דבר ראשון אני צריך משהו שעובד..
אח"כ נוכל להמשיך... -
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
@dovid אמר בשאלות של מתחיל - מקצועי ב nodejs:
@חוקר אתה ממש ממש טועה.
אתה מנסה לכופף את האוטו ללמוד לעבוד עם סוסים, היחיד שמפסיד זה אתה.
היית יכול להכביר בשאלות, נענה לך בל"נ על הכל, רק אל תכפיף את המנטליות של nodejs האסינכרונית להרגלים שלך (אני גם השתגעתי, מבטיח לך).דבר ראשון אני צריך משהו שעובד..
אח"כ נוכל להמשיך...אני חייב להמשיך לנהל את הלקוחות והשוטף תוך כדי למידה, לשנות כיוון חשיבה לא בא כ"כ מהר, אני עושה בינתיים למידה ועבודה בצורה אסינכרונית, כשבמקביל אני לומד את העיקרונות של התחביר האסינכרוני.
הרכבת לא עוצרת.
זה משהו שאני לא עיכלתי אותו עדיין.
בכל זאת תודה לכל העוזרים, בעזה"י עוד נגיע להכל. -
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
מה היא הדרך הכי טובה להפעיל את השרת ע"י SSH שהתהליך לא יסתיים לאחר סגירת החלון, ומצד שני שניתן יהיה כל הזמן לעדכן ולהריץ שינויים?
התשובה הנכונה לזה הוא להשתמש ב-tmux. גם c9 משתמש ב-tmux.
sudo apt install tmux tmux ... #תריץ תהליכים #יציאה ... #כניסה מחדש tmux attach #התהליכים עדיין רצים (לא ברקע אלא מקדימה)
-
@yossiz אמר בשאלות של מתחיל - מקצועי ב nodejs:
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
מה היא הדרך הכי טובה להפעיל את השרת ע"י SSH שהתהליך לא יסתיים לאחר סגירת החלון, ומצד שני שניתן יהיה כל הזמן לעדכן ולהריץ שינויים?
התשובה הנכונה לזה הוא להשתמש ב-tmux. גם c9 משתמש ב-tmux.
sudo apt install tmux tmux ... #תריץ תהליכים #יציאה ... #כניסה מחדש tmux attach #התהליכים עדיין רצים (לא ברקע אלא מקדימה)
לא מכיר, אבל זה נראה משהו בסגנון screen, אם כן זה לא הדרך הכי טובה, כי אם יש שגיאה והאפליקציה קורסת אין מי שיודיע לך על זה ויפעיל אותה מחדש. הדרך הטובה ביותר היא להריץ אותה עם סרביס דוגמת PM2 שהציע קליאון
-
@יוסף-בן-שמעון הוא התייחס לתחילת השאלה (מה היא הדרך הכי טובה להפעיל את השרת ע"י SSH שהתהליך לא יסתיים לאחר סגירת החלון), ולא לנוד.