2017-03-14 2 views
0

Ich versuche, eine JSON als POST Anfrage offen zu legen, wo ich versuche, die Basis-URL mit einem anderen Wert anzufügen.Wie bekomme ich die Base-URL knotenrot?

Wie kann ich den Basis-URL-Wert erhalten?

Ich habe versucht, mit:

var root = RED.settings.httpNodeRoot; 

aber kehrte dann nur /, wo, wie ich so etwas wie http://localhost:1880 erwartet.

Ist es möglich, die Basis-URL mit einer beliebigen node-red API zu erhalten? Jede Hilfe könnte geschätzt werden.

Antwort

1

Es ist nicht direkt verfügbar, aber Sie können es aus einigen der verfügbaren Teile zusammenbauen.

Haben Sie einen Blick auf die Zeichnung Funktion im Wemo nodes

Grundsätzlich Sie den Hafen und den Weg bekommen können vom RED.settings Objekt, aber die IP-Adresse, hängt sehr stark von der Maschine, die Sie auf ausgeführt werden. Standardmäßig bindet Node-RED an 0.0.0.0 (was für alle verfügbaren IP-Adressen eine Kurzbezeichnung ist).

Wenn Sie auf NodeJS neueren als 0.12.x laufen, dann können Sie die IP-Adresse der Standardroute erhalten, die normalerweise eine faire Schätzung ist. Für NodeJS 0.10.x muss man einfach nur raten.

var ipAddr; 
//device.ip 
var interfaces = os.networkInterfaces(); 
var interfaceNames = Object.keys(interfaces); 
for (var name in interfaceNames) { 
    if (interfaceNames.hasOwnProperty(name)) { 
    var addrs = interfaces[interfaceNames[name]]; 
    for (var add in addrs) { 
     if (addrs[add].netmask) { 
     //node 0.12 or better 
     if (!addrs[add].internal && addrs[add].family == 'IPv4') { 
      if (ip.isEqual(ip.mask(addrs[add].address,addrs[add].netmask),ip.mask(device.ip,addrs[add].netmask))) { 
      ipAddr = addrs[add].address; 
      break; 
      } 
     } 
     } else { 
     //node 0.10 not great but best we can do 
     if (!addrs[add].internal && addrs[add].family == 'IPv4') { 
      ipAddr = addrs[add].address; 
      break; 
     } 
     } 
    } 
    if (ipAddr) { 
     break; 
    } 
    } 
} 

var callback_url = 'http://' + ipAddr + ':' + settings.uiPort; 
if (settings.httpAdminRoot) { 
    callback_url += settings.httpAdminRoot; 
} 

an diesem Code Blick erinnert mich Ich habe ein Update hinzufügen für wenn HTTPS aktiviert ist ....

+0

Dank für die schnelle Antwort @hardillb Dank. Nun, ich habe 'https' nicht explizit irgendwo aktiviert. Ich denke, ich muss das auch in meinen ** Einstellungen ** tun? – Kulasangar

+1

Wenn Sie darüber nachdenken, wird in den meisten Fällen, wenn https aktiviert wurde, dies nicht funktionieren, da die WeMo-Geräte den selbstsignierten Zertifikaten nicht vertrauen – hardillb