2016-04-25 14 views
1

node.jsの初心者とiamがexpress.jsリダイレクトルーチンで現在作業中です。 これまでのコードでは、セッション変数が保存されており、リダイレクトが正常に機能しています。 しかし、すぐに新しいタブを開き、(127.0.0.1/login.ejs)のようなURLを入力しようとすると、iamがログインしているとhub.ejsにリダイレクトされます。しかし、この場合はリダイレクトは機能しません。ログインしていなくても、新しいタブに(127.0.0.1/hub.ejs)などを入力しても同じ問題です。リダイレクトはlogin.ejsをロードするはずですが、何も動作していません。Node.js - res.redirectが動作しない

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}); 
}); 

第1の機能ブロック、app.useは後にが定義されているすべてのルートのために実行される明示ミドルウェアである:ページが

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

リダイレクトドキュメント:http://expressjs.com/en/api.html#res.redirect –

答えて

0

次のコードを使用して、空のままです。セッションが利用できず、ユーザーがログインページを要求していない(リダイレクトループを防止する)かどうかを確認することです。ユーザーがログインしていない場合、ユーザーはログインページにリダイレクトされ、そうでなければ正しいルートが実行されます。

login.ejsの場合セッションが設定され、ハブにリダイレクトされているかどうかを確認するだけです。ページlogin.ejsのレンダリングを防止するには、returnステートメントに注意してください。

hub.ejsについては、単にそのページをレンダリングします。ユーザーがログインしていない場合は、ミドルウェアのためログインページにリダイレクトされます。 app.get("/hub.ejs"は、単に実行されません。

コードが動作するには、この特定の順序でコードを表示する必要があります(Middlwareは最初にルートを2番目に指定します)。

関連する問題