服务器代码:
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 :(得分: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) {
完美无缺。