2013-09-04 6 views
13

Ich baue ein REST-Backend für ein SPA mit NodeJS, Restify und PassportJS zur Authentifizierung. Alles funktioniert bis auf den letzten Schritt, der den Client von den Backends/Login/Facebook/Callback auf die Homepage der Anwendung umleitet.Client umleiten mit NodeJS und Restify

Ich habe online gesucht und viele Antworten für ExpressJS gefunden, aber noch nichts nützliches für Node-Restify. Ich habe es geschafft, ein paar Code-Schnipsel zu holen und das ist, was ich im Moment bin versucht:

app.get('/api/v1/login/facebook/cb', passport.authenticate('facebook', { scope: 'email' }), function(req, res) { 
    req.session.user = req.user._id; 
    res.header('Location', '/#/home'); 
    res.send(); 
}); 

Die Antwort gesendet wird, aber die Lage Header ist nicht inbegriffen und der Kunde ist mit einem weißen präsentiert Bildschirm. Wie führe ich eine ordnungsgemäße Umleitung mit der Node-Restify-API durch?

Antwort

14

Restify-Kommentar-Schnittstelle now has a redirect method verwenden.

Zum Zeitpunkt des Schreibens gibt es einen Test, der zeigt, wie man es benutzt here.

Der Inhalt dieses Tests sind:

server.get('/1', function (req, res, next) { 
    res.redirect('https://www.foo.com', next); 
}); 

Viele Leute, die Restify sind besser vertraut mit Express.js verwenden. Es ist wichtig zu verstehen, dass einer der drei wichtigsten öffentlichen API-Unterschiede, der die Portierung von Express-Plugins beeinflusst, darin besteht, dass die res.redirect-Methode in Restify next (oder an InternalError is thrown) erfüllt.

  • server.use ist nur für Pfad & HTTP-Methode unabhängige Middleware
  • res.redirect erfordert, dass Sie passieren: Ich habe persönlich mehrere Module von Express Restify und die wichtigsten API Unterschiede auf den ersten sind (in Restify) portiert next
  • Einige Mitglieder oder die Request-Schnittstelle sind Methoden und keine Werte wie req.path. req.path ist ein Alias ​​von req.getPath in Restify

ich bin NICHT sagen, dass unter der Motorhaube sie ähnlich sind, aber dass die drei oben genannten Dinge sind die Haupthindernisse für die Portierung auf Express-Plugins. Under-the-hood, Restify hat viele Vorteile gegenüber Express in meiner Erfahrung mit der Verwendung in großen Unternehmensanwendungen und persönlichen Projekten.

+0

Akzeptieren Sie dies als mehr im Einklang mit der beabsichtigten Verwendung von Restify – Routhinator

+0

Aus welchem ​​Grund, mit Restität 4.3.0, musste ich das Protokoll 'https: // www.foo.com' enthalten, sonst würde es nur den Pfad nur umleiten. – occasl

+0

@occasl danke, ich werde aktualisieren –

11

Sie müssen Umleitungsstatuscode 302.

res.send(302); oder res.send(302, 'your response');

+0

Funktioniert perfekt. Vielen Dank! – Routhinator