2016-04-25 48 views
1

Iam是一個初學者,負責node.js和iam目前在express.js重定向例程上的工作。 該代碼工作到目前爲止,會話變量正在存儲和重定向工作正常。 但是,一旦我打開一個新選項卡並嘗試輸入像(127.0.0.1/login.ejs)這樣的url,它應該重定向到hub.ejs,如果iam登錄。但在這種情況下,重定向不起作用。如果我沒有登錄並在新選項卡中輸入例如(127.0.0.1/hub.ejs),則會出現同樣的問題。重定向應該加載login.ejs,但沒有任何工作。頁面保持爲空Node.js - res.redirect不能正常工作

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

使用下面的代碼:

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

第一功能塊,app.use是會爲之後定義所有路由被執行快遞中間件。它所做的是檢查會話是否不可用,並且用戶沒有請求登錄頁面(以防止重定向循環)。如果用戶未登錄,用戶將被重定向到登錄頁面,否則將執行正確的路由。

對於login.ejs我們只需檢查會話是否已設置並重定向到集線器。請注意0​​聲明以防止呈現login.ejs頁面。

對於hub.ejs,我們只需渲染該頁面。如果用戶沒有登錄,他將僅僅因爲我們的中間件而被重定向到登錄頁面。那麼app.get("/hub.ejs"將不會被執行。

請注意,該代碼應該以此特定順序出現才能工作(Middlware首先,路由第二)。