2016-07-20 19 views
0

Welche spezifischen Änderungen müssen an dem folgenden Code vorgenommen werden, damit der JSON-Inhalt der message-Variable vom Node.js-Server an den AngularJS-Client gesendet werden kann?Einschließlich JSON in Node.js res.redirect()

Der folgende Code befindet sich in der Routingdatei einer Node.js-App. Der folgende Code generiert JSON und leitet die Steuerung dann an den Handler redirectURL='/' weiter, der die Datei ./public/index.html an den AngularJS-Client sendet.

Es ist wichtig, dass der JSON message in dieser Transaktion an den AngularJS-Client gesendet wird, sodass die AngularJS-Browser-App dafür verantwortlich sein kann, die eindeutige Identität des Benutzers zu bewahren. Auf diese Weise können nachfolgende Anfragen von AngularJS-Browser-Apps von Hunderten von Klonen dieser Node.js-App bedient werden, und jeder Klon verwendet den JSON, den er bei jeder Anfrage erhält, um sich mit einem Redis-Cluster zu verbinden, um die Benutzeridentität über mehrere zu verwalten Anfragen. Dadurch können sich Node.js Benutzeridentitäten nicht merken.

app.get('/some_endpoint', function(req, res) { 
    var redirectURL = '/'; 
    request.post(otherServerUrl, function(err, response, body){ 
     if(err){console.log('ERROR with token request.')} 
     var data = JSON.parse(body); 
     getUser(data.access_token).then(function(message) { 
      console.log('in callback, jwtJSON is: ');console.log(message); 
      res.redirect(redirectURL); 
     }); 
    }); 
}); 

app.get('*', function(req, res) { 
    res.sendfile('./public/index.html'); // load the single view file (angular will handle the front-end) 
}); 

Beachten Sie, dass die app.get('*', function(req, res) muss in der Lage sein, auch Anforderungen von Benutzern zu dienen, die nicht von app.get('/some_endpoint', function(req, res) umgeleitet haben und die somit haben keine message JSON auf dem Server an den Browser App gesendet werden.

+0

Wenn ich Ihre Frage richtig verstanden habe, sagen Sie, dass Ihr Frontend den Inhalt der Nachrichtenvariablen nicht empfängt? – gca

+0

Ändern Sie 'res.redirect (redirectURL)' in 'res.json (message)'? – jfriend00

+0

@AnveshChecka Ja, Sie verstehen richtig. Die Angular-App empfängt nur index.html. – FirstOfMany

Antwort

1

Wenn Sie versuchen, Informationen an eine Seite zu übergeben, die von einer Umleitung geladen wird, besteht die übliche Vorgehensweise darin, die Informationen als Abfrageparameter in der Weiterleitungs-URL zu codieren.

Dies wird durch die Umleitung an die neu geladene Seite weitergeleitet und diese Seite kann dann die Abfrageparameter analysieren, um die Informationen zu erfassen.

Es ist auch möglich, Informationen in einen Cookie vor der Weiterleitung zu stellen und die umgeleitete Seite Informationen vom Cookie zu erhalten, aber wenn Sie während des Weiterleitungsprozesses andere Domänen verwenden, kann der Cookie kompliziert oder unpraktisch sein (seit Cookies sind einer bestimmten Domäne zugeordnet).

Sie können JSON nicht einfach mit der Weiterleitungsantwort zurückgeben, da eine Weiterleitung den JSON nicht an die umgeleitete Seite weiterleitet - so funktionieren Weiterleitungen nicht. Eine Weiterleitung lädt nur die Seite, die der neuen URL entspricht.

+0

Vielen Dank und +1, dass Sie sich die Zeit genommen haben, mich durch dieses Thema zu sprechen. – FirstOfMany

+0

@FirstOfMany - Für die Zukunft. Was die Dinge viel schneller geklärt hätte, war ein Flussdiagramm, das zeigte, welche Informationen von welcher Anfrage zu welcher Seite zu bekommen versuchten. Erst vor einer Stunde habe ich endlich verstanden, was du versucht hast. Wie auch immer, froh, dass du es jetzt sortiert hast. – jfriend00