【问题标题】:server-side changes for $locationProvider.html5Mode(true);$locationProvider.html5Mode(true) 的服务器端更改;
【发布时间】:2013-10-11 03:52:28
【问题描述】:

服务器代码:

app.get('/', function(req, res){
    console.log('executed "/"')
     res.render('home');
});

app.get('/partials/:name', function (req, res) {
    console.log('executed partials:name');
    var name = req.params.name;
    console.log(name);
    res.render('partials/' + name);
});

在我将$locationProvider.html5Mode(true); 将'/#/' url 转换为常规/ url 之前,该代码运行良好。

之后,console.log('executed partials:name'); 无法执行。 Documentation 说:-

Server side
Using this mode requires URL rewriting on server side, basically you have to rewrite all 
your links to entry point of your application (e.g. index.html)

我尝试的更改不起作用。有哪些改变?

编辑:以下是角码:

var myApp = angular.module('myApp', []);

myApp.config(['$routeProvider', function($routeProvider, $locationProvider) {
  $routeProvider.
      when('/', {
        templateUrl: 'partials/partial',
        controller: 'homePage'
      }).      
      otherwise({redirectTo: '/login'});
    $locationProvider.html5Mode(true);
}]);

我再次提到,路由工作得很好,直到我将 $locationProvider.html5Mode(true); 添加到 angular。

【问题讨论】:

    标签: node.js angularjs express angularjs-routing


    【解决方案1】:

    不太确定这是否符合您的问题,但当我们这样做时,我们需要在服务器上创建一些规则(在 Nginx 中使用我们的设置)以确保没有指向 /page 的链接不要只返回 404,因为它在服务器上不存在。

    首先,我们需要确保指向 Angular 路由的链接被这样处理。所以我们将 ourdomain.com/page 重写为 ourdomain.com/#/page/page 在服务器上不存在,仅在 Angular 中,因此它会返回 404。它需要转到索引以便 Angular 可以处理路由(这与传入链接相关,而不是当你在网站上的时候就这么多了,因为无论如何 Angular 都会处理链接)。

    其次,我们需要为 partials 设置一个例外,因为它们实际上存在于服务器上,而不是 Angular 路由。所以去ourdomain.com/partials/partial其实需要在服务器上找到partial,不能用上面的规则重写。

    希望至少有所帮助。

    【讨论】:

    • 感谢您的回答。我只是为 ourdomain.com 路由,它使用 ng-view 链接到部分/部分。在我添加 '$locationProvider.html5Mode(true);' 之前,路由工作得很好在角度。之后路由停止工作。如果有助于澄清问题,请添加 angularjs 代码
    【解决方案2】:

    在这种情况下,错误与路由无关。 myApp.config(['$routeProvider', function($routeProvider, $locationProvider) 定义错误。

    它应该包括$locationProvider,因此:-

    myApp.config(['$routeProvider', '$locationProvider', function($routeProvider,
     $locationProvider) {
    

    完美运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      相关资源
      最近更新 更多