דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
ח

חוקר

@חוקר
אודות
פוסטים
1.3k
נושאים
199
שיתופים
0
קבוצות
0
עוקבים
5
עוקב אחרי
0

פוסטים

פוסטים אחרונים הגבוה ביותר שנוי במחלוקת

  • תתי הפניות ב express
    ח חוקר

    @יוסף-בן-שמעון אמר בתתי הפניות ב express:

    if(someCondition) res.send("המערכת סגורה")
    else next()

    לשם ההבנה, למה עשית את זה בתוך תנאי? כי ממ"נ אם אני עושה send או end זה אמור לסיים את הריצה, לא?

    תכנות

  • תתי הפניות ב express
    ח חוקר

    @יוסף-בן-שמעון אמר בתתי הפניות ב express:

    @חוקר אז אתה צריך middleware, כתוב כך:

    נראה לי שזה אכן מה שהייתי צריך!
    תודה

    תכנות

  • תתי הפניות ב express
    ח חוקר

    @יוסף-בן-שמעון אמר בתתי הפניות ב express:

    @חוקר כמה הארות על הקוד שלך:

    1. אתה לא צריך לדאוג לקוד תגובה 200, ולא להידר Content-Type, אקספרס כבר עושה את העבודה השחורה הזו, תשתמש במתודה
    res.setHeader('Access-Control-Allow-Origin', '*')
    
    1. גם לא צריך להמיר את ה JSON למחרוזת, גם לזה אקספרס דואג, תעשה res.send(maslulim_to_api)

    3.לא צריך לנתח את ה URL בכל בקשה, אקספרס מגיש לך את זה מוכן כך: req.query.someQuery

    1. לדעתי מה שחסר לך זה לא ראוטינג אלא middleware אבל זה ניחוש, אם תפרט מה בדיוק הצורך שלך יהיה אפשר לדייק

    תודה על הערותיך, אני אוהב ללמוד ולהתלמד מהדברים שבין השורות.
    טוב שאתה קורא אותי ומבין את הקוד לעצם העניין מה אני יכול לשפר, הקלת עלי.

    תכנות

  • תתי הפניות ב express
    ח חוקר

    @יוסף-בן-שמעון
    בגדול הנקודה היא כך:
    ישנם פעולות אני רוצה לבצע בכל גישה לסקריפט לכתובת ivr לדוגמא, והוא האם כעת זה שעות פעילות, ובאם לא, השרת יגיב שהמערכת סגורה.
    מתחת זה אני רוצה בנתיב ivr/get_limud שהמערכת תחזיר בתשובה את הלימודים היומיים, ובנתיב ivr/get_maslul המערכת תחזיר את רשימת המסלולים.
    וכדומה על זה הדרך, שחלק מהקוד הוא גלובאלי, וחלק מהקוד הוא לפי הנתיב.
    אני יודע שניתן לעשות פונקציה ולהפעיל אותה בכל נתיב לעצמו, אבל אני חושב שיהי לי הרבה יותר קל ונכון לסדר למעלה את מה שגלובאלי, ולמטה לכל נתיב את הפעולות של הנתיב. ואפילו ליצור תתי נתיבים.
    תודה

    תכנות

  • תתי הפניות ב express
    ח חוקר

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

    app.all('/',(req,res) => {
        res.writeHead(200, {'Content-Type': 'application/json; charset=utf-8', 'Access-Control-Allow-Origin' : '*'});
        var query = url.parse(req.url,true).query;
        if (maslulim_to_api && maslulim_to_api !== {}) {
            maslulim_to_api['status'] = 'OK';
        }
        app.all('/get_limud_yomi2',(req,res) => {
            var query = url.parse(req.url,true).query;
            res.end(JSON.stringify(maslulim_to_api));
    
        });
        app.all('/get_maslulim',(req,res) => {
            var query = url.parse(req.url,true).query;
            res.end(JSON.stringify(limud));
    
        });
        //console.log(maslulim_to_api);
    });
    
    תכנות

  • אזורי זמן בחו"ל
    ח חוקר

    @nigun אמר באזורי זמן בחו"ל:

    @חוקר
    כנראה שהמערכת שלך מיועדת עבור יהודים
    ורובם מתרכזים האותו איזור זמן
    דהיינו ניו יורק טורנטו מונטריאול וכו'
    ויש לך עוד ריכוז קטן בחוף המערבי שזה לוס אנגל'ס
    אבל עם הבדל של 3 שעות
    אבל בקנדה אני לא מכיר ערים שנמצאים במרכז או במערב עם ריכוז יהודי גבוה
    @dovid
    אם אני לא טועה ניו יורק זה איזור זמן -4

    הגדרתי בצורה קבועה לשעון ניו יורק
    והתפשרתי לשעה 4 לפנות בוקר

    date_default_timezone_set('America/New_York');
    if ($time > '0359'){
        $date = date('Ymd');
    }else{
        $date = date('Ymd', (time()-(60*60*24)));
    }
    

    והשאר יתגמשו לפי זה..
    תודה

    תכנות

  • אזורי זמן בחו"ל
    ח חוקר

    @dovid אמר באזורי זמן בחו"ל:

    קנדה זה ארץ גדולה מאוד, והיא נכנסת לתוך איזור זמן אחר https://www.timeanddate.com/time/map/
    תבדוק לפי עיר.

    חשבתי לעשות סינון לפי המספר המחוייג,
    יש לי מספר מקנדה ומספר מארה"ב.
    אין לי רעיון קל לסינון יותר מורכב, אני יעשה א"כ משהו באמצע במקום 5:00 לפנות בוקר יזוז התאריך, אעשה משהו באמצע של שני האזורים.
    (אולי ניתן לסנן לפי אזור חיוג של המספר המחייג, אבל לא נראה לי שווה להיכנס לזה..)

    תכנות

  • אזורי זמן בחו"ל
    ח חוקר

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

    תכנות

  • התקנת תעודה SSL עבור NODE
    ח חוקר

    @dovid אמר בהתקנת תעודה SSL עבור NODE:

    כאמור תוכל לעשות להיפך, לשנות את הפורט של אפאצ', ולנתב עם הnginx לפי ההוסט או הפורט.
    תוכל גם בכל שלב שתחליט לבטל לגמרי את האפאצ' ולעבוד רק עם nginx.

    בהחלט, אבל הכלל אצלי שדבר ראשון צריך לראות שזה עובד..

    תכנות

  • התקנת תעודה SSL עבור NODE
    ח חוקר

    @חוקר אמר בהתקנת תעודה SSL עבור NODE:

    התקנתי את certbot --nginx
    אך היות ונוד אינו נגיש מפורט 443 אלא השרת אפאצ'י, וכשאני מנסה לגשת לפורט
    https://domain.com:3030
    אני מקבל שגיאת אבטחה.
    מה ניתן לעשות?
    בגדול אני רוצה להשאיר את האפאצי כמות שהוא, כי הוא משמש לחיבורים הדורשים HTTPS, והמטרה הנוכחית היא להנגיש את נוד שהוא בפורטים אחרים, אך שיהיה ג"כ מאובטח.
    תודה

    ב"ה הסתדרתי
    לאחר ההתקנה הנ"ל נוסף לי בקובץ ההגדרות של nginx
    הקוד הזה:

        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    

    מה שעשיתי, שיניתי את הפורט 443 לפורט המבוקש וכעת זה נותן לי להתחבר בצורה מאובטחת לפורט שאני צריך.
    תודה לכל העוזרים

    תכנות

  • התקנת תעודה SSL עבור NODE
    ח חוקר

    התקנתי את certbot --nginx
    אך היות ונוד אינו נגיש מפורט 443 אלא השרת אפאצ'י, וכשאני מנסה לגשת לפורט
    https://domain.com:3030
    אני מקבל שגיאת אבטחה.
    מה ניתן לעשות?
    בגדול אני רוצה להשאיר את האפאצי כמות שהוא, כי הוא משמש לחיבורים הדורשים HTTPS, והמטרה הנוכחית היא להנגיש את נוד שהוא בפורטים אחרים, אך שיהיה ג"כ מאובטח.
    תודה

    תכנות

  • התקנת תעודה SSL עבור NODE
    ח חוקר

    @dovid
    לפי מה שחיפשתי, הבנתי שניתן להתקין SSL ישירות בשימוש על ידי נוד, אבל יותר קל באמת לעבוד על ידי הגשר של ה ngnix על ידי פרוקסי.
    השאלה שלי היא האם זה משפיע בעומסים?

    תכנות

  • פתיחת טווח פורטים בחומת האש
    ח חוקר

    @dovid
    התשובה היא אכן
    להשים כך:
    3030-3040.

    תכנות

  • התקנת תעודה SSL עבור NODE
    ח חוקר

    @dovid אמר בהתקנת תעודה SSL עבור NODE:

    @חוקר אמר בהתקנת תעודה SSL עבור NODE:

    @dovid
    כעת שמותקן לי אפאצי, עבור ה PHP, הngnix יחילף אותו?

    אתה יכול לסדר שיחיו זה לצד זה אבל זה מיותר,
    הngnix יכול לארח php מצויין.

    לשם ההבנה, איך ניתן להשתמש בשניהם?
    ע"י הוראות מפורשות איזה פורט מאזין כל אחד?

    תכנות

  • התקנת תעודה SSL עבור NODE
    ח חוקר

    @dovid
    כעת שמותקן לי אפאצי, עבור ה PHP, הngnix יחילף אותו?

    תכנות

  • פתיחת טווח פורטים בחומת האש
    ח חוקר

    אני משתמש בAWS EC2
    אני רוצה לפתוח בחומת האש פורטים נכנסים, כמה פורטים ברצף.
    איך אני מגדיר את זה בפקודה אחת במקום הרשאת כל פורט הנפרד?
    מצ"ב תמונה של פאנל הניהול להוספת פורט
    6ae2c7be-d90b-4d57-8530-f523d203cdb3-image.png

    תכנות

  • התקנת תעודה SSL עבור NODE
    ח חוקר

    תגובה: בקשת עזרה- תעודת SSL
    אני רואה שכבר נידון כבלינק הנ"ל.
    אבל בכל זאת לא מצאתי שם תשובה למה שאני צריך.
    יש לי שרת שמותקן עליו אפאצ'י לפורט 80 ו 443.
    שם יש לSSL בסדר גמור, שהתקנתי מ certbot.
    הבעיה היא שיש לי שם מותקן ג"כ נוד למספר פורטים שונים, ואני רוצה לפורטים אלו ג"כ SSL, עבור חיבור משרתים אחרים בAPI הדורשים HTTPS
    מה ואיך ניתן להתקין SSL לשרת נוד?
    ב certbot לא ראיתי התייחסות לנוד.
    תודה

    תכנות

  • NODEJS איחזור נתונים מתוך node-fetch
    ח חוקר

    @dovid אמר בNODEJS איחזור נתונים מתוך node-fetch:

    צודק טעיתי, צריך לעשות את זה אחרת, מסובך טיפה:

    
    fetch('https://httpbin.org/post', { method: 'POST', body: 'a=1' })
        .then(res => Promise.all([res.json(), res.headers.get('content-type')])) 
        .then(arr => {
          console.log(arr[0]);
          console.log(arr[1]);
        });
    
    

    אבל לדעתי יותר אלגנטי להשתמש עם אובייקט.

    כך זה עובד, רק למה לא הולך לעשות את זה סתם כמערך, למשל:

    fetch('https://httpbin.org/post', { method: 'POST', body: 'a=1' })
        .then(res => [res.json(), res.headers.get('content-type')]) 
        .then(arr => {
          console.log(arr[0]);
          console.log(arr[1]);
    });
    
    תכנות

  • בניית מחלקת תקשורת עם ימות המשיח API ב nodejs
    ח חוקר

    @magicode תודה רבה.
    בעזה"י אנסה להתקדם עם מה שכתבת

    תכנות

  • בניית מחלקת תקשורת עם ימות המשיח API ב nodejs
    ח חוקר

    ישנה מחלקה של תקשורת עם ימות המשיח ב API, בשפת PHP, שבנה אותה "מאזין נלהב" בפורום ימות.
    להלן קישור לפרסום בפורום ימות
    http://www.call2all.co.il/f2/viewtopic.php?f=12&t=2780
    ולהלן הקוד עצמו.

    ברצוני לבנות את זה בNODE רק שאני רוצה כיון איך ניתן לבנות אותו שיהיה בצורה אסינכרונית.
    שאוכל להדפיס תשובה למערכת שההקלטה הסתיימה בהצלחה, ובמקביל להתחבר לימות המשיח ע"י API ולהוריד את ההקלטה, ולשלוח אותה לדוא"ל.
    (המודולים של ימות להלקטה ושליחה למייל לא רלוונטים, אני מדבר על הקלטה שמבוצעות בשלוחת API בתהליך שיחה, שאני רוצה בסיום לשלוח מייל עם פרטי השיחה, ובנוסף את ההקלטה.)
    בPHP למשל היה עלי לבצע הכל תוך כדי שהמאזין ממתין, מוריד מימות מעלה למייל, ואז מדפיס למסך פקודה לימות שההקלטה הסתיימה. כאן אני רוצה את הגמישות של אסינכרוני.

    אם יש למישהו כיון או דוגמה של מחלקה דומה בנוד, אשמח מאוד.
    תודה

    @magicode אולי תוכל בשתי מילים לעזור.
    אני חייב לך הכרת הטוב מרובה (חוץ מזה שאני משתמש נטפרי) על עזרתך בתחילת הדרך בנוד.

    המחלקה ב PHP:

    /*================יצירת אובייקט(מופע) חדש====================*/
    
    $con = new connecting_to_yemot_api('0773137770', '0000');
    
    /*===============================================================*/
    
    
    /*================קבלת מספר היחידות====================*/
    
    $a = $con -> connecting('GetSession');
    
    print_r($a);
    
    /*===============================================================*/
    
    
    
    /*================הפעלת קמפיין====================*/
    
    $body = array
    (
    // מספר הקמפיין
    'templateId' => '203584',
    );
    
    $a = $con -> connecting('RunCampaign', $body);
    
    print_r($a);
    
    /*===============================================================*/
    
    
    /*================הורדת קובץ====================*/
    
    $body = array
    (
    // נתיב הקובץ
    'path' => 'ivr/ext.ini',
    );
    
    $a = $con -> connecting('DownloadFile', $body);
    
    print_r($a);
    
    /*===============================================================*/
    
    
    
    /*================העלאת קובץ====================*/
    
    // יצירת הקובץ
    $File = new oFile('ext.ini', 'text/plain', 'type=menu');
    
    $body = array
    (
    'path' => 'ivr/ext.ini',
    'convertAudio' => 0,
    'fileUpload' => $File
    );
    
    $a = $con -> connecting('UploadFile', $body);
    
    print_r($a);
    
    /*===============================================================*/
    class BodyPost
    {
    // part "multipart/form-data"
        public static function PartPost($name, $val)
         {
             $body = 'Content-Disposition: form-data; name="' . $name . '"';
    // check instance of oFile
             if($val instanceof oFile)
              {
                  $file = $val->Name();
                  $mime = $val->Mime();
                  $cont = $val->Content();
    
                  $body .= '; filename="' . $file . '"' . "\r\n";
                  $body .= 'Content-Type: ' . $mime ."\r\n\r\n";
                  $body .= $cont."\r\n";
              } else $body .= "\r\n\r\n".$val."\r\n";
             return $body;
         }
    
        public static function Get(array $post, $delimiter = '-------------0123456789')
         {
             if(is_array($post) && !empty($post))
              {
                  $bool = true;
                  //foreach($post as $val) if($val instanceof oFile) {$bool = true; break; };
                  if($bool)
                   {
                       $ret = '';
                       foreach($post as $name=>$val)
                           $ret .= '--' . $delimiter. "\r\n". self::PartPost($name, $val);
                       $ret .= "--" . $delimiter . "--\r\n";
                   } else $ret = http_build_query($post);
              } else throw new \Exception('Error input param!');
             return $ret;
         }
    }
    
    class oFile
    {
         private $name;
         private $mime;
         private $content;
    
         public function __construct($name, $mime=null, $content=null)
          {
              if(is_null($content))
               {
                   $info = pathinfo($name);
    // check is exist and readable file
                   if(!empty($info['basename']) && is_readable($name))
                    {
                        $this->name = $info['basename'];
    // get MIME
                        $this->mime = mime_content_type($name);
    // load file
                        $content = file_get_contents($name);
                        if($content!==false)
                        {
                            $this->content = $content;
                        }
                        else
                        {
                            throw new Exception('Don`t get content - "'.$name.'"');
                        }
                    }
                    else
                    {
                        throw new Exception('Error param');
                    }
               }
               else
               {
                       $this->name = $name;
                       if(is_null($mime)) $mime = mime_content_type($name);
                       $this->mime = $mime;
                       $this->content = $content;
                };
          }
    
        public function Name() { return $this->name; }
    
        public function Mime() { return $this->mime; }
    
        public function Content() { return $this->content; }
    
    }
    
    class connecting_to_yemot_api
    {
        public $token;
    
        const URL = 'https://www.call2all.co.il/ym/api/';
    
        public function __construct($user_name, $password)
        {
            $body = array('username' => $user_name, 'password' => $password);
    
            $body = http_build_query($body);
    
            $opts = array('http' => array(
    
                'method'  => 'POST',
    
                'header'  => "Content-Type: application/x-www-form-urlencoded",
    
                'content' => $body,
    
                'follow_location' => false) );
    
             $context  = stream_context_create($opts);
    
             $url = self::URL.'Login';
    
                $result = file_get_contents($url, FALSE, $context);
    
                $result = json_decode($result);
    
                if($result -> responseStatus == 'OK')
                {
                    $this -> token = $result -> token;
    
                    return TRUE;
                }
                else
                {
                    throw new Exception('שם המשתמש או הסיסמא של המערכת שגויים');
                }
        }
    
        public function __destruct()
        {
            $this -> connecting('Logout');
        }
    
        public function connecting($action, $body = array())
        {
            $delimiter = '----'.uniqid();
    
            $body['token'] = $this -> token;
    
            $body = BodyPost::Get($body, $delimiter);
    
            $opts = array('http' =>
                    array(
                        'method'  => 'POST',
                        'header'  => 'Content-Type: multipart/form-data; boundary='.$delimiter,
                        'content' => $body,
                        'follow_location' => false
                        )
                      );
            $context  = stream_context_create($opts);
    
            $url = self::URL.$action;
    
            $result = file_get_contents($url, FALSE, $context);
    
            $headers = $this -> parseHeaders($http_response_header);
    
            if($headers['Content-Type'][0] == 'application/json')
            {
                return json_decode($result);
            }
            else
            {
                return $result;
            }
        }
    
        private function parseHeaders($headers)
        {
            // פונקציה שמקבלת מערך של שורות הכותרות
            // הפונקציה מפרקת את קבצי הקוקי לתת-מערך נפרד
    
    
            // מערך הכותרות
            $head = array();
    
            foreach( $headers as $k=>$v )
            {
                $t = explode( ':', $v, 2 );
    
                if( isset( $t[1] ) )
                {
                    if($t[0] == 'Set-Cookie')
                    {
                        $CookiesArr = array();
    
                        $cookies = explode( ';', $t[1]);
    
                        foreach($cookies as $cookie)
                        {
                            $c = explode( '=', $cookie);
    
                            if( isset( $c[1] ) )
                            {
                                $CookiesArr[ trim($c[0]) ] = trim( $c[1] );
                            }
                            else
                            {
                                $CookiesArr[] = trim( $c[0] );
                            }
                        }
    
                        $head[ trim($t[0]) ] = $CookiesArr;
                    }
                    elseif($t[0] == 'Content-Type')
                    {
                        $arr = array();
    
                        $children = explode( ';', $t[1]);
    
                        foreach($children as $child)
                        {
                            $c = explode( '=', $child);
    
                            if( isset( $c[1] ) )
                            {
                                $arr[ trim($c[0]) ] = trim( $c[1] );
                            }
                            else
                            {
                                $arr[] = trim( $c[0] );
                            }
                        }
    
                        $head[ trim($t[0]) ] = $arr;
                    }
                    else
                    {
                        $head[ trim($t[0]) ] = trim( $t[1] );
                    }
                }
                else
                {
                    $head[] = $v;
                    if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) )
                    {
                        $head['reponse_code'] = intval($out[1]);
                    }
                }
            }
            return $head;
        }
    }
    
    תכנות
  • 1 / 1
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום