2017-02-20 82 views
0

我是節點js中的新手,這是我的問題。如何在節點js中使用express重定向後app.get

我設置app.js的代碼如下登錄頁面登錄後重定向,

app.post('/login', function(req, res, next) { 
passport.authenticate('local-login', function(err, user, info) { 
    if (err) { return next(err); } 
    if (!user) { return res.redirect('/login'); } 
    req.flash("email"); 
    var email_address = req.body.email; 
    var username = email_address.substring(0, email_address.lastIndexOf("@")); 
    global_username = username; 
    return res.redirect('/status.html'+'?channel='+username); 
    })(req, res, next); 
}); 

現在我想「/status.html'+'?channel='+通過使用app.get

用戶名,使我創造了這樣的代碼,

app.get('/status.html?channel='+ global_username, isLoggedIn, function(req, res){ 
    console.log("Logged in"); 
    var chk_username = req.body.email; 
    var temp = chk_username.substring(0, chk_username.lastIndexOf("@")); 
    if(temp != global_username){return res.json({success: false, message:"Unauthorized Attempt"});} 
}); 

但是,它不通過app.get功能去..我試圖檢查其是否已登錄或不是通過使用console.log而是沒有出現任何東西。

有沒有人有想法解決這個問題?

謝謝。

+0

後重定向用戶,它結束與服務器的連接,從而防止所有後續路由調用。您可以執行的是執行您在重定向之前的獲取請求期間要執行的代碼。 –

+0

@Theodore_Kim感謝您的評論! :)那麼你的意思是我應該把「app.get('/ status.html?channel ='+ global_username,isLoggedIn,function(req,res){」res.redirect('/ status.html'+'?channel ='+ username);? – paulc1111

+0

不,我的意思是,在重定向客戶端之後,你結束了響應過程,這意味着服務器不會再向服務器發送對原始請求的響應,因此,你不會在重定向客戶端後進入GET路線,我希望這是有道理的...... –

回答

2

好吧,首先,如果您使用global_username作爲實際的全局變量,那不是一個好主意。這意味着每當有人登錄時,每個人的價值都會發生變化。我不認爲這就是你想要的。

此外,你的路線中不應該有查詢字符串的東西;這通常不是路由的一部分,只是路徑的一部分。坦率地說,我甚至沒有遵循你在這個函數中要做的事情,但是你應該知道的另一件事是,在獲取請求中沒有任何主體,所以即使你點擊這個中間件,你也不會從req.body獲取一個值。

如果所有你想要做的是重定向到一個URL,然後可以使用當前用戶,然後將護照,在REQ對象你,所以你可以這樣做:

app.get('/status.html, isLoggedIn, function(req, res){ 
    console.log("Logged in"); 
    if (req.user) return res.send({message: 'Success'}); 
    return res.status(401).send({message: 'you are not logged in'}); 
}); 
+0

謝謝你回答我的問題題! :D嗯..是的,你是對的..:'(我是新來的,所以我有點困惑,試圖找出我想要的任何東西..大聲笑.. 無論如何謝謝你再次,希望你有一個祝大家好日子!:) – paulc1111

+0

不用道歉,我希望你能根據我們的答案對它進行排序。 – Paul

0

你可以做這樣的事情:

app.post('/login', (req, res, next) => { 
    passport.authenticate('local-login', function(err, user, info) { 
    if (err) return next(err); 
    if (!user) return res.redirect('/login'); 
    req.flash("email"); 
    var email_address = req.body.email; 
    var username = email_address.substring(0, email_address.lastIndexOf("@")); 
    global_username = username; 
    console.log("Logged in"); 
    var chk_username = req.body.email; 
    var temp = chk_username.substring(0, chk_username.lastIndexOf("@")); 
    if(temp != global_username){ 
     res.json({success: false, message:"Unauthorized Attempt"}); 
    }  

    return res.redirect('/status.html'+'?channel='+username); 
    })(req, res, next); 
}); 

res.redirect函數結束服務器和客戶機之間的連接。因此,它不會達到其他路由請求。基本上,你希望在函數內執行你的代碼,而不需要次要的調用。您仍然可以在給定實例之外實現GET路由。