2013-10-04 67 views
0

服務器代碼:

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);到角。

回答

0

在這種情況下,錯誤不是路由。 myApp.config(['$routeProvider', function($routeProvider, $locationProvider)定義錯誤。

它應該包括$locationProvider這樣的: -

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

完美。

0

不太確定這是否與您的問題相符,但是當我們這樣做時,我們需要在服務器上創建一些規則(在我們的設置中,在Nginx中)以確保鏈接到/頁不只是返回404因爲它在服務器上不存在。

首先,我們需要確保到Angular路線的鏈接被視爲這樣。所以我們重寫ourdomain.com/pageourdomain.com/#/page/頁在服務器上不存在,只在Angular中存在,所以它將返回404。它需要轉到索引,以便Angular可以處理路由(這與傳入鏈接相關,而不是當你無論如何,Angular處理鏈接)。

其次,我們需要爲partials做一個例外,因爲那些實際上實際存在於服務器上,而不是Angular路由。因此,要去ourdomain.com/partials/partial實際上需要找到服務器上的部分,並且不能被上述規則重寫。

希望至少有所幫助。

+0

感謝您的回答。我只是爲ourdomain.com路由,它使用ng-view鏈接到partials/partial。路由工作得很好,直到我添加'$ locationProvider.html5Mode(true);'在角度。之後,路由停止工作。如果有助於澄清問題,則添加angularjs代碼 –