2016-04-25 3 views
1

Iam ein Anfänger zu node.js und Iam arbeitet derzeit an einer express.js Redirect-Routine. Der Code funktioniert so weit, die Sitzungsvariable wird gespeichert und die Weiterleitungen funktionieren einwandfrei. Aber sobald ich eine neue Registerkarte öffne und versuche, eine URL wie (127.0.0.1/login.ejs) einzugeben, sollte sie zu hub.ejs umleiten, wenn ich mich eingeloggt habe. Aber in diesem Fall funktioniert die Weiterleitung nicht. Es ist das gleiche Problem, wenn ich nicht angemeldet bin und beispielsweise (127.0.0.1/hub.ejs) in eine neue Registerkarte eingib. Die Weiterleitung sollte login.ejs laden, aber nichts funktioniert. Die Seite bleibt leerNode.js - res.redirect funktioniert nicht

app.get("/login.ejs", function(req, res) 
{ 
    if(!req.session.userName) 
    { 
     res.render(__dirname + "/login.ejs"); 
    } 
    else 
    { 
     res.redirect(__dirname + "/hub.ejs"); 
    } 
}); 

app.get("/hub.ejs", function(req, res) 
{ 
if(req.session.userName) 
{ 
     res.render(__dirname + "/hub.ejs", {userName: req.session.userName,  clients: clients}); 
    } 
    else 
    { 
     res.redirect(__dirname + "/login.ejs"); 
    } 
}); 
+0

Redirect Dokumentation: http://expressjs.com/en/api.html#res.redirect –

Antwort

0

den folgenden Code verwenden:

app.use(function(req, res, next) { 
    if (!req.session.userName && req.baseUrl !== 'login.ejs') { 
     return res.render(__dirname + "/login.ejs"); 
    } 
    next(); 
}) 

app.get("/login.ejs", function(req, res) { 
    if(req.session.userName) { 
     return res.redirect(__dirname + "/hub.ejs"); 
    } 
    res.render(__dirname + "/login.ejs"); 
}); 

app.get("/hub.ejs", function(req, res) { 
    res.render(__dirname + "/hub.ejs", {userName: req.session.userName,  clients: clients}); 
}); 

Der erste Funktionsblock, app.use ist ausdrücklich Middleware, die für alle Routen nach definiert ausgeführt wird. Es überprüft, ob die Sitzung nicht verfügbar ist und der Benutzer die Anmeldeseite nicht anfordert (um Umleitungsschleifen zu verhindern). Der Benutzer wird zur Anmeldeseite weitergeleitet, wenn er nicht eingeloggt ist und ansonsten die korrekte Route ausgeführt wird.

Für die login.ejs Wir überprüfen einfach, ob eine Sitzung eingestellt ist und umleiten zum Hub. Beachten Sie die return-Anweisung, um das Rendern der Seite login.ejs zu verhindern.

Für die hub.ejs wir einfach diese Seite rendern. Wenn der Benutzer nicht eingeloggt ist, wird er wegen unserer Middleware einfach auf die Login-Seite weitergeleitet. Die app.get("/hub.ejs" wird dann einfach nicht ausgeführt.

Beachten Sie, dass der Code in dieser bestimmten Reihenfolge angezeigt werden soll, damit er funktioniert (Middleware zuerst, Routen zweite).