【发布时间】:2016-08-28 05:44:47
【问题描述】:
/home、/profile 甚至 / 这样的路由在按下浏览器刷新按钮时可以完美运行,因为这样,服务器会发送默认的 .html 和 angular 文件(因为下面的服务器代码),然后这些 angular 文件处理当前的 url。
当我在具有多个/ 的路由上按刷新时出现我的问题(例如,在使用路由参数时这是必需的),例如/manage/users、/user/12345678...等。
然后,jQuery 抛出这个奇怪的错误Uncaught SyntaxError: Unexpected token <,然后 Bootstrap 开始抱怨没有得到 jQuery,并且页面看起来很糟糕,没有化妆......等等。
需要明确的是,当我使用 Angular 自己的路由器(使用 $state.go('/manage/users')、<ui-sref='profile'> 等)访问具有多个 / 的路由时,这个问题(显然)不会发生,因为那时Angular 已经被加载来处理那个 url。
但是当我刷新页面时,由于没有 Angular 来处理该路由,浏览器会向服务器询问该路由,显然 Express 中的 /* 也无法处理该路由。
我通过以下方式从我的服务器提供 .html 文件:
app.all('/*', function(req, res, next) {
// Just send the index.html for other files to support HTML5Mode
res.render('index.html');
});
在处理完所有 API 路由之后。 index.html(希望)之后会加载所有的角度文件。
有没有类似的东西:
app.all('**/*', function(req, res, next) { ... });
... 以任意数量的/s 在任意路径渲染 html?或者某种正则表达式?
TIA
【问题讨论】:
-
你使用的是html5Mode吗?
-
@QoP 是的,使用 $locationProvider.html5Mode(true)
-
@QoP 好的!设置 $locationProvider.html5Mode(false) 神奇地解决了这个问题!但是将
#!(hashbang)放在应用程序路由之前。我也需要删除它,因为我正在实现 Facebook 分享,而且显然它不适用于 hashbangs -
当你有html5(true)的时候,你设置了base吗?
-
将其作为答案发布!
标签: javascript angularjs url express routing