【发布时间】:2013-02-15 16:38:51
【问题描述】:
我正在为旧版本的 Android (2.3.x) 构建一个 web/phonegap 应用程序。在我尝试将任何服务器重定向添加到组合中之前,一切都很好。这是场景:
服务器 (node.js) 有一个在“/”处监听的路由。当这条路由被命中时,它会检查是否存在会话。如果没有会话,它会重定向到 /login。很好,这部分有效(无论如何,服务器方面)。
当客户端获得重定向时,问题就出现了。因为Android 2.3 不支持history.pushState,它回退到hashbangs。这意味着 AngularJS 将 url 重写为 /#!/login,这会导致服务器请求到 '/',这会导致服务器检查会话并重定向到 '/login',这会导致 AngularJS 将 url 重写为 /#!/登录..等等等等..无限期。
任何想法如何使用 AngularJS 从服务器重定向?我不应该在我的路由中处理这个逻辑,而是尝试在客户端上实现它吗?我敢肯定,必须有一种方法来处理这个问题,但我似乎无法弄清楚。
任何帮助将不胜感激。谢谢!!
【问题讨论】:
-
我不确定我是否完全按照您的描述:如果服务器发出重定向,则应该由浏览器接收,而不是 AngularJS。但也许您通过 xhr 从服务器获取该 URL,并分配给 $location,但这是行不通的:来自 Angular 文档:“$location 服务只允许您更改 URL;它不允许您更改重新加载页面。当您需要更改 URL 并重新加载页面或导航到其他页面时,请使用较低级别的 API,$window.location.href。"或者,也许您需要重定向到
/login#!/login? -
我希望我能准确地展示发生了什么,但 Angular 正在“劫持”我的服务器重定向。服务器重定向到 /login 并且 Angular 将其重写为 /#!/login,这会导致服务器说“你没有登录,所以重定向到登录”。服务器将路由获取为 /(这是应该的,因为 Angular 将其重写为)。