$ locationProvider.html5Mode的服务器端更改(true);

时间:2013-10-04 08:07:55

标签: node.js angularjs express angularjs-routing

服务器代码:

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到常规/网址之前,代码完美无缺。

之后,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);添加到角度。

2 个答案:

答案 0 :(得分:0)

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

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

其次我们需要为partials做一个例外,因为那些实际上实际存在于服务器上并且不是Angular路由。因此,转到 ourdomain.com/partials/partial 实际上需要在服务器上找到部分内容,并且不能通过上述规则重写。

希望至少有所帮助。

答案 1 :(得分:0)

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

它应包括$locationProvider因此: -

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

完美无缺。