Express res.render不能使用Angular路由

我有一个基于node.js,express,angular(与路由)和mongo的web应用程序。 身份validation通过Passport.js进行处理。

我的angular度视图通过http请求与服务器交互。 说我发送types的请求:

$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.'}); 

有了这个代码,我想用户被redirect到login页面,如果会话已经过期。

现在,这不起作用,我没有redirectlogin。 即使我有console.log(req.user)产生undefinedreq.user==undefined给予trueres.render中的res.render不工作。 如果我尝试res.redirect('login'); 我得到一个404错误,说/api/login不存在。

我真的很迷茫,任何帮助将不胜感激。

你的$http.get()res.render()获取内容。 你可以通过添加console.log(data);来看到这个console.log(data);$http.get().success()你需要添加一些逻辑到你的客户端redirect,如果有一个错误的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 }); } 

angular

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

注:这是未经testing,但它会给你一个大致的想法。 可能有一个更优雅的解决scheme。

我实现了类似于@Jordoniasbuild议的东西。 我从服务器获取用户(如果会话过期,则为null ),如果用户为null ,则使用$window.location.href="/login"; 注销用户。 感谢@Jordonias。 欢迎更好的替代品。