【问题标题】:Refresing a route with more than one '/' gives errors in Angular使用多个“/”刷新路由会导致 Angular 出现错误
【发布时间】: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


【解决方案1】:

你必须在你的“头脑”中设置基地

<head>
  <base href="/">
  ...
</head>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-09
    • 2020-01-12
    • 1970-01-01
    • 2019-07-02
    • 2021-10-12
    • 2021-05-20
    • 2018-11-27
    • 2019-10-10
    相关资源
    最近更新 更多