节点重定向不适用于角度

Posted

技术标签:

【中文标题】节点重定向不适用于角度【英文标题】:node redirect not working on angular 【发布时间】:2015-09-18 05:02:01 【问题描述】:

嗨,我是 node 新手,我正在构建一个简单的 MEAN 堆栈应用程序,以减少我发送这样的前端文件的代码

app.use(express.static(path.join(__dirname, 'public')));

我还为简单的身份验证构建了一个简单的中间件

requireLogin = function (req, res, next) 
  if (!req.user) 
      console.log('redirecting :)');
      res.redirect('/');
   else 
      next();
  
;

app.use('/rooms',requireLogin);

我正在尝试在有角度的路线上使用这个中间件。 但这在我浏览我的 Angular 应用程序时不起作用(当我直接将 URL 放到地址栏时它起作用)我还删除了由 angular 添加的 /#/。

    $locationProvider.html5Mode(
    enabled: true,
    requireBase: false
);

我正在使用 ui-router 进行路由。

【问题讨论】:

【参考方案1】:

您应该在 angular 上进行重定向,而不是在 node.js 应用程序上。例如,

requireLogin = function (req, res, next) 
  if (!req.user) 
      console.log('User does not exist.');
      return false;
      // 
   else 
      next();
  
;

app.use('/rooms', requireLogin);

那么,/rooms 将无法访问,除非有用户登录。

后端路由(快速路由):这些是最终用户不必知道甚至使用它们的路由(您的 Angular 应用程序将使用它们与后端通信以处理其数据,但最终用户不会将它们直接放在浏览器上))。

前端路由(角度路由):是映射到应用程序不同页面的路由,因此,最终用户可以使用它们直接访问应用程序的某些部分。

阅读Express.js or angular for handling routes in a MEAN application?了解更多详情。

【讨论】:

我遇到了类似的问题,res.redirect('/') 无法正常工作。我改为创建一条路线让角度处理它。但是,当用户加载页面时,在用户被重定向回索引之前会有一点延迟。有没有办法解决异步操作的这种滞后? IE,如果服务器的响应是false,我从使用$location.url('/') 的控制器发送我的回调,当检查req.session.userID 时——有什么想法吗?

以上是关于节点重定向不适用于角度的主要内容,如果未能解决你的问题,请参考以下文章

重定向到 https 不适用于 www

角度2:在同一路线上重定向时再次重新加载同一组件

301 重定向不适用于 url 中的 %20

.htaccess 重定向桌面但不适用于移动浏览器

.htaccess 内部重定向不适用于字符串参数

跨域 ajax 不适用于移动 Safari 中的重定向