Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Http request in javascript

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Http request in javascript

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      tp1de last edited by

      Hallo ich versuche mich gerade an meinem ersten Javascript Programm.

      Bisher habe ich alles in Node-Red realisiert, so langsam wird der Code aber unübersichtlich und ich möchte mich nun nach 2 Jahren Node-Red in Javascript versuchen.

      Ich scheitere aber am http Aufruf.

      Ich möchte dabei die url, die headers und die method GET/POST vorgeben.

      Kann mir jemand helfen wie die Syntax lautet?

      Grüße Thomas

      P.S. Mit meinen 61 Jahren tue ich mich noch mit der JS-Syntax etwas schwer 😞 , aber ich bin sicher, dass das für viele hier im Forum trivial ist ….

      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        Das NPM-Modul https://www.npmjs.com/package/request ist bereits im Javascript-Adapter enthalten.

        metaxa 1 Reply Last reply Reply Quote 0
        • T
          tp1de last edited by Jey Cee

          Danke. Jetzt müsste ich nur verstehen wie ich den Rückgabewert erhalte.

          Verstehe die Callback Funktion nicht so richtig.

          var request = require('request');
          
          var options = { url: ' xxxxxx', method: 'GET', headers: { 'User-Agent': 'request' }};
          
          request(options, callback);
          
          ******** Wie kann ich die info-JSON hier weiter verwenden ? *********
          
          function callback(error, response, body)
          
          {
          
          if (!error && response.statusCode == 200)
          
          {
          
          var info = JSON.parse(body);
          
          }}
          
          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @tom57:

            Verstehe die Callback Funktion nicht so richtig. `
            Die Callback-Funktion wird ausgeführt, wenn das Ergebnis vorliegt.
            @tom57:

            Wie kann ich die info-JSON hier weiter verwenden ? `
            Wenn ein JSON-String als Ergebnis geliefert wird, ist info nach JSON.parse() ein Objekt, auf dessen Eigenschaften man zugreifen kann, so wie statusCode eine Eigenschaft des Objektes response ist.

            Bitte Javascript-Code in code tags posten !

            var request = require('request');
            var options = {url: 'xxxxxx', method: 'GET', headers: { 'User-Agent': 'request' }};
            request(options, function(error, response, body) {
               if (!error && response.statusCode == 200) {
                  var info = JSON.parse(body);  // info ist ein Objekt
                  var x = info.xy;  // xy ist eine Eigenschaft des Objektes info
               }
            });
            
            1 Reply Last reply Reply Quote 0
            • T
              tp1de last edited by

              Soweit klar. Aber so wie ich das sehe, kann das Hauptprogramm welches den request aufruft, den Rückgabewert nicht weiterverarbeiten.

              D.h. nur die aufgerufene callback-Funktion kann die http Get Rückgabewerte weiterverarbeiten.

              Oder kann ich die gelesenen Werte an das Hauptprogramm welches den request aufruft weitergeben? (Falls Ja wie?)

              Ansonsten funktioniert der Aufruf …. Vielen Dank

              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 last edited by

                @tom57:

                nur die aufgerufene callback-Funktion kann die http Get Rückgabewerte weiterverarbeiten. `
                Richtig. Du wirst Dich sicherlich daran gewöhnen.

                1 Reply Last reply Reply Quote 0
                • T
                  tp1de last edited by

                  Ich möchte noch einmal versuchen Hilfe zu bekommen.

                  Die http-Abfage mit request(options, callback) funktioniert soweit. Vielleicht kann mir jemand helfen, wie ich Verbindungsfehler econnreset verarbeiten kann. D.h. ich möchte dann die http-Abfrage nach einer bestimmten Wartezeit solange wiederholen, bis die Abfrage erfolgreich war.

                  Aktuell frage ich ca. 10 Werte einzeln per http-Request alle 30 Sekunden ab. Ca. 7-8 sind erfolgreich, 2-3 aber nicht.

                  Ich habe versucht in der callback-Funktion den request nach einer Sekunde zu wiederholen, das funktioniert aber so nicht so richtig:

                  function callback(error, response, body)
                  { 
                     if (!error && response.statusCode == 200) 
                     {
                          Daten(body);   // Weiterverabeitung
                     }
                     else
                     {
                       console.warn('*** http Fehler:');
                       setTimeout(request(options, callback),1000);
                       request(options, callback);
                     }
                  }
                  

                  Kann mir jemand helfen, wie ich das richtig mache?

                  Viele Grüße

                  Thomas

                  1 Reply Last reply Reply Quote 0
                  • blauholsten
                    blauholsten Developer last edited by

                    @tom57:

                    Ich möchte noch einmal versuchen Hilfe zu bekommen.

                    Die http-Abfage mit request(options, callback) funktioniert soweit. Vielleicht kann mir jemand helfen, wie ich Verbindungsfehler econnreset verarbeiten kann. D.h. ich möchte dann die http-Abfrage nach einer bestimmten Wartezeit solange wiederholen, bis die Abfrage erfolgreich war.

                    Aktuell frage ich ca. 10 Werte einzeln per http-Request alle 30 Sekunden ab. Ca. 7-8 sind erfolgreich, 2-3 aber nicht.

                    Ich habe versucht in der callback-Funktion den request nach einer Sekunde zu wiederholen, das funktioniert aber so nicht so richtig:

                    function callback(error, response, body)
                    { 
                       if (!error && response.statusCode == 200) 
                       {
                            Daten(body);   // Weiterverabeitung
                       }
                       else
                       {
                         console.warn('*** http Fehler:');
                         setTimeout(request(options, callback),1000);
                         request(options, callback);
                       }
                    }
                    

                    Kann mir jemand helfen, wie ich das richtig mache?

                    Viele Grüße

                    Thomas `

                    SSorry, aber du erklärst das recht bescheiden.

                    Aber wenn ich das richtig verstehe, ist das besser:

                    function callback(error, response, body)
                    { 
                       if (!error && response.statusCode == 200) 
                       {
                            Daten(body);   // Weiterverabeitung
                       }
                       else
                       {
                         console.warn('*** http Fehler:');
                         setTimeout(request(options, callback),1000);
                       }
                    }
                    
                    1 Reply Last reply Reply Quote 0
                    • T
                      tp1de last edited by

                      Ja Du hast recht. Genauso habe ich das auch versucht.

                      Das Problem ist aber, dass beim http-Fehler dann jede Sekunde der request rekursiv neu aufgerufen wird und sich so ggfs. eine Queue mit requests aufbaut. Eine Sekunde scheint zu kurz.

                      Ich frage aktuell 14 Werte einzeln ab. 60% funktionieren und bei 40% muss ich erneut abfragen … z.T. bis zu 8 Mal bis ich den Wert erhalte !

                      Nach einigen Stunden / Tagen Laufzeit des Scipts laufen die "wartenden" requests bis zu 30 Minuten nach, wenn ich das js-Programm beende !

                      Das ist so nicht so schön und die wiederholten requests erzeugen noch mehr Verbindungsabbrüche (econnreset).

                      Ich suche noch nach einer besseren Lösung . Gibt es eine Möglichkeit den http-request synchron auszuführen, d.h. mit dem Programmablauf zu "warten" bis es einen status.code bzw. body als return gibt?

                      1 Reply Last reply Reply Quote 0
                      • blauholsten
                        blauholsten Developer last edited by

                        @tom57:

                        ).

                        Ich suche noch nach einer besseren Lösung . Gibt es eine Möglichkeit den http-request synchron auszuführen, d.h. mit dem Programmablauf zu "warten" bis es einen status.code bzw. body als return gibt? `

                        Kannst du Mal den kompletten Code posten?

                        1 Reply Last reply Reply Quote 0
                        • metaxa
                          metaxa @paul53 last edited by

                          @paul53 sagte in Http request in javascript:

                          Das NPM-Modul https://www.npmjs.com/package/request ist bereits im Javascript-Adapter enthalten.

                          Ist das wirklich so? Mit blockly gibt es keine Fehlermeldungen, kaum importiere ich das blockly in ein JS, erhalte ich folgende Meldung:44227f57-2448-4ac8-be09-01504dcadf1e-grafik.png
                          Ich beisse mir jetzt schon seit Tagen mit meinen Nichtkenntnissen in JS die Zähne aus.

                          schedule("*/10 * * * *", function () {
                          var result;
                              try {
                                  require("request")('https://api.e-control.at/sprit/1.0/search/gas-stations/by-address?latitude=48.138062&longitude=16.235994&fuelType=DIE&includeClosed=true', function (error, response, result) {
                                    console.log(result);
                                  setState("a_andreas.0.sys_variablen.Objekt_JSON", result, true);
                                  }).on("error", function (e) {console.error(e);});
                              } catch (e) { console.error(e); }
                            console.debug("request: " + 'https://api.e-control.at/sprit/1.0/search/gas-stations/by-address?latitude=48.138062&longitude=16.235994&fuelType=DIE&includeClosed=true');
                          });
                          

                          Kann mir bitte jemand weiterwelfen?
                          LG, mxa

                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @metaxa last edited by

                            @metaxa sagte:

                            erhalte ich folgende Meldung

                            Die Meldung sollte ignoriert werden: Es ist keine "echte" Fehlermeldung;

                            1 Reply Last reply Reply Quote 0
                            • AlCalzone
                              AlCalzone Developer last edited by

                              Du kannst die Zeile sogar weglassen - die Variable request existiert bereits im Skript-Kontext.

                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              878
                              Online

                              31.8k
                              Users

                              79.9k
                              Topics

                              1.3m
                              Posts

                              5
                              13
                              7823
                              Loading More Posts
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes
                              Reply
                              • Reply as topic
                              Log in to reply
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                              The ioBroker Community 2014-2023
                              logo