Express res.render不使用Angular路由

时间:2014-08-28 19:35:17

标签: node.js authentication express angular-routing

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

我的角度视图通过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提供trueres.render中的if也无效。如果我尝试使用res.redirect('login'); 我收到404错误,指出/api/login不存在。

我真的迷失了这一点,任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

您的$http.get()正在从res.render()获取内容。 您可以在console.log(data);中添加$http.get().success()来查看此内容 如果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
});

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

答案 1 :(得分:0)

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