2014-08-28 74 views
1

我有一個基於node.js,express,angular(with routes)和mongo的web應用程序。身份驗證通過Passport.js進行處理。Express res.render不適用於Angular路由

我的角度視圖通過http請求與服務器交互。說我送類型的請求:

$http.get('/api/getMyData').success(function(data) {})... 
我在服務器上

app.get('/api/getMyData',function(req, res) { 
    if(!req.user){ 
    // if the session expired 
    res.render('login.ejs',{message:'Session expired. Please login again.'}); 

有了這個代碼,我希望用戶被重定向到登錄頁面,如果會話已過期。

現在,這是行不通的,我沒有重定向登錄。即使我有console.log(req.user)生產undefinedreq.user==undefined給予trueif內的res.render不起作用。如果我嘗試res.redirect('login'); 我得到一個404錯誤,說/api/login不存在。

我真的很迷茫,任何幫助將不勝感激。

+0

你是不是指res.render? (您的標題) – 2014-08-28 20:21:29

+0

標題編輯,謝謝。 – ZzKr 2014-08-28 22:26:44

回答

0

我實現了類似於@Jordonias建議的東西。 我從服務器獲取用戶(如果會話過期,則爲null), 以及如果用戶爲null我使用$window.location.href="/login";來註銷用戶。 感謝@Jordonias。更好的選擇是值得歡迎

2

您的$http.get()res.render()返回內容。 您可以通過在$http.get().success() 中添加console.log(data);來查看此信息。如果從api發生錯誤,您需要向客戶端添加一些邏輯以重定向。

喜歡的東西:

server.js

app.get('/api/getMyData', function(req, res) { 
    if(!req.user) { 
    res.status(401); 
    return res.json({ 
     status: 'error', 
     message: 'Unauthorized' 
    }); 
    } 
    return res.json({ 
    status: 'success', 
    // Stuff 
    }); 
} 

$http.get('/api/getMyData').success(function(data) { 
    // Do something 
}).error(function(data, status) { 
    // Handle the error 
}); 

注:這是未經測試,但它會給你一個總體思路。可能有更優雅的解決方案。

+0

感謝您的評論。我看到這可能是一個解決方案。 假設我得到一個帶有status:error的json,那麼我怎麼才能從angular重定向到像login.ejs這樣的登錄頁面,並帶有特定的消息(我想在原始帖子中如果想這麼做)? 在任何情況下,我仍然不明白爲什麼res.render在這種情況下不起作用。 – ZzKr 2014-08-28 22:30:26

+0

爲** login.ejs **(/ login)創建一個路由並執行諸如'$ location.path(url);'then'$ scope。$ apply();' – Jordonias 2014-08-29 15:09:21