קורס Node.JS שיעור תרגול סביבת העבודה


זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/nodejs/lessons/18-lab-environment

היי,
איך אני ‘תופס’ מחרוזת שתבטא את כתובת הip באמצעות ביטוי רגולרי עם השימוש בmatch?
בשיעור על ping השתמשת ב:
const match = out.match(/time=(\d+)/);
אני רוצה לעשות אותו דבר, פשוט לשמור במשתנה מחרוזת של כתובת הip שמתקבלת מהפעלת ipconfig באמצעות match.

https://www.oreilly.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html

היי אני לא מצליח להתקדם עם המשימה הראשונה
אשמח לעזרה
אני מנסה לכתוב קוד שיפעיל את הcmd דרך הנוד ואני לא מצליח
בגדול זה מה שעשיתי

let child_process = require('child_process');

function ipconfing() {

        child_process.exec('ipconfig',(err,stdout,stderr)=>{

            //console.log(`stdout: ${stdout}`);

            console.log(stdout)

            return stdout

        } )}

console.log(ipconfing())

הי

כשאני מפעיל את הקוד שלך הוא עובד ומדפיס את התוצאה של ipconfig. אולי צריך לתת נתיב מלא לפקודה? את יכולה מ CMD להפעיל את תוכנית ipconfig ? את יכולה לבדוק איפה על המחשב שלך תוכנית זאת מותקנת?

אני פתחתי את הpath דרך משתני הסביבה
אני אנסה לדייק את מה שרציתי לעשות פה
אני רציתי לקבל את הip כסתרינג
ובמקום זה הוא נותן לי את כל שאר הheaders בלי הבופר של הip

הי אפשר להדביק צילום מסך שאני אבין יותר טוב מה ניסית ומה קיבלת ?

שלום ינון.
אני מאוד נהנת מקורס node.js
יש לי שאלה
לגבי התרגיל שיעור 17
(אתגר) שלבו את התוכנית הקודמת בשרת Express: כתבו שרת Express שבגישה לאחד הנתיבים שלו יפעיל את ipconfig, ימשוך ממנה את כתובת ה IP של המכונה ויחזיר לגולש כתובת זו. לאחר מכן עדכנו את הקוד כך שהשרת יזכור את כתובת ה IP ויפעיל את ipconfig פעם אחת בלבד

הי אחלה כיף לשמוע שהקורס עוזר. מה השאלה לגבי התרגיל?

יש לי כמה שאלות

  1. איך אפשר לעשות שרק בפעם הראשונה יגש לשרת להביא את כתובת IP ויזכור זאות?
    מה שאני עשיתי זה משתנה שאתחלתי אותו NULL ואז כל פעם שאלתי האם הוא NULL
    אם כן הלכתי להביא את הנתון.
    אחרת החזרתי את מה שהיה לי
    יש פתרון יותר נכון/ אלגנטי?

  2. האם הייתי צריכה ליצא פונקציה שמחזירה PROMISE
    או שיכולתי ליצא את האוביקט
    const proc = spawn(‘ipconfig’);
    שהעמסתי עליו אירועים.

  3. האם פונקציות resolve, reject צריך להוסיף לפניהם return עלמנת שא ימשיכו הלאה בקוד.

מצורף הפתרון שלי

const {spawn} = require('child_process');

let IP = null;

module.exports = function getIp(){

    return new Promise((resolve, reject)=>{

        console.log(IP);

        if(IP !=null){

             return resolve(IP);

        }

            const proc = spawn('ipconfig');

            proc.on('error', (err)=>{

                console.log('errpr: process not started');

            });

            proc.on('exit', function(statusCode){

                if(statusCode ===0){

                    console.log("procces OK");

                }

                else{

                    console.log("procces failed");

                }

            });

            proc.stdout.on('data',function(data){

                let res = data.toString('utf8');

               

                //const paragraph = 'The IPv4 Address. . . . . . . . . . . : 192.168.0.100 7890765';

                const regex = /IPv4 Address. . . . . . . . . . . : (\d+(\.\d+)*)/i;

                const found = res.match(regex);

                if(found != undefined){

                    res = found[1];

                    IP = res;

                   // console.log(res);

                    resolve(res);

                }

            });

                            

    })

   

}

הי מלכה,

הפיתרון נראה מעולה! אהבתי את השימוש ב Promises. כן כדאי להוסיף גם קריאות ל reject כשהפעולה האסינכרונית נכשלת.

  1. מה שעשית זה מצוין. אופציה נוספת היא להחזיר Promise (במקום פונקציה שמחזירה Promise), ואז אם ה Promise הוא כבר resolved אז מיד מקבלים את הערך.

  2. עדיף לייצא פונקציה שמחזירה Promise או Promise ממש, כי זה יותר ברור איך להשתמש בהם כדי לקבל את ה ip.

  3. כן צריך return אלא אם כן זה סוף הפונקציה