2017-05-29 7 views
-1

Ich benutze Knoten Anfrage var request = require(“request”); in meinem Config-Knoten, um eine POST-Anfrage zu machen und als Antwort erhalten Sie einen Cookie, die in allen anderen Anfragen verwiesen werden müssen.Knoten Anfrage in Anfrage mit Cookie

Ich versuchte COOKIE JAR zu aktivieren, das funktioniert, wenn ich meine Anfrage unter erste Anfrage ketten, aber ich möchte Rest von Anfragen wie GetList von benutzerdefinierten Knoten aufrufen.

Ich versuchte Toughcookie (Datei-Cookie) funktioniert nicht, wenn ich var j = request.jar(new FileCookieStore(‘cookies.json’)) hinzufügen; Knoten stoppen ohne Fehler zu arbeiten.

Unten ist mein Konfig-Knoten, Code, mit dem ich Cookie bekomme.

function myAuthNode(n) { 

     RED.nodes.createNode(this,n); 
     this.username=n.username; 
     this.password=n.password; 


      this.connect=function(){ 
       //TODO-NG need to make URL configurable 
       request.post({url: "http://localhost:8080/api/method/login", qs: {usr: this.username, pwd: this.password}}, function(err, res, body) { 

        if(err) { 
          return console.error(err); 
        } 

        console.log("HERE IF I PUT REQUEST Works fine"); 
        console.log("CAN WE PASS ANOTHER REQUEST here from calling SOURCE to execute here?"); 

       }); 

     }; 



    } 

Hier in diesem benutzerdefinierten Knoten Ich rufe

// The main node definition - most things happen in here 
    function GetListNode(n) { 
     // Create a RED node 
     RED.nodes.createNode(this,n); 
     console.log('I am called'); 

     //using auth config now you are connected, tell me what is needed? 
     this.authConfig=RED.nodes.getNode(n.auth); 
     //connect to config and do auth 

     this.authConfig.connect(); 

//THIS ALWAYS FAILS due to cookie not found where as I enable request JAR 

     request.get({url: "http://localhost:8080/api/resource/Project"}, function(err, res, body) { 

       if(err) { 
         return console.error(err); 
       } 

        console.log("Response body:", body); 

      }); 


    } 

Bitte vorschlagen, wie Cookies in Anfrage bearbeiten, so dass alle Anfragen nach Auth funktioniert?

Können wir eine Anfragedefinition an eine andere Anfrage zur Ausführung in ihr übergeben oder wie kann Cookie behandelt werden?

+2

Erstellen Sie eine einzelne Cookie-Jar-Instanz und übergeben Sie sie oder setzen Sie den Standardwert: 'var j = request.jar(); var request = request.defaults ({jar: j}) '. Sie könnten auch versuchen, den Inhalt der Keksdose auszudrucken, 'j.getCookieString (url);' –

+0

Danke für den Vorschlag Risto. Ich probierte das früher in myAuthNode, die mir mein Plätzchen aber zeigen, wie man es innerhalb GetListNode benutzt, während ich eine andere Anfrage mache, die auch dasselbe Anfrageobjekt ist, wo ich Standards setze, aber es nie liest, was ich falsch mache? –

+0

Können Sie auf der Serverseite auch überprüfen, dass die Anfrage keine der Cookie-Header sendet, nur "console.log" oder abfangen die Anfrage mit Proxy, um die Header zu sehen. –

Antwort

0

ich beschlossen dies von unten nach innen GetListNode tun(), i zweite Anforderung innerhalb der Anruf verschoben:

this.authConfig.connect(function(){request.get({url: "http://localhost:8080/api/resource/Project"}, function(err, res, body) { 

     if(err) { 
       return console.error(err); 
     } 

      console.log("Response body:", body); 

    });}); 

und innerhalb Config Knoten tat i unten, hinzugefügt ARBEITETE einen Funktionsparameter und aufgerufen, die Funktion übergeben, fein :):

this.connect=function(f){ 
       //TODO-NG need to make URL configurable 
       request.post({url: "http://localhost:8080/api/method/login", qs: {usr: this.username, pwd: this.password}}, function(err, res, body) { 

        if(err) { 
          return console.error(err); 
        } 

        f.call(); 

       }); 

     };