我正在使用Express和Angular开发Node应用程序。我正在使用Angular进行路由,并且我的路由设置如下:
app.config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/', {
templateUrl: '/partials/main'
//controller: 'IndexController'
}).when('/discover', {
templateUrl: '/partials/discover'
}).when('/user/home', { //HERES THE PROBLEM CHILD!!!!!
templateUrl: '/partials/user/home'
}).otherwise({
redirectTo: '/'
});
}]).config(['$locationProvider', function ($locationProvider) {
$locationProvider.html5Mode(true);
}]);
现在,每当我尝试拨打/user/home
时 - 页面进入无限循环并继续重新加载控制器。我可以在节点控制台中看到该页面是从partials/user/home
调用的,它肯定包含一个Jade文件。我已经检查了其他帖子,其中大部分是在parts路径的开头用/
解决的,这在这里没有帮助。如果我将home.jade
转移到没有子目录的/partials
目录中,页面加载正常。有什么想法吗?
更新:似乎无限循环发生在我尝试在部分的任何子目录中加载部分时。
按要求:
节点 - App.js:
app.get('/', routes.index);
app.get('/partials/:name', routes.partials);
app.get('*', routes.index);
和routes / index.js
exports.index = function(req, res) {
res.render('index', { title: 'Open Innovation Station' });
}
exports.partials = function(req, res) {
res.render('partials/' + req.params.name);
}
答案 0 :(得分:12)
使用html5Mode(true)
,您将不得不关注任何相对路径 - 您正在使用的部分路径。我相信,你的案例中的递归可以通过添加:
<base href="/"></base>
到<head>
。
答案 1 :(得分:2)
您为partials指定的路由规则将不匹配partials文件夹中对子目录的任何请求,例如/谐音/文件夹/文件。路由路径匹配器将/
视为变量之间的分隔符。因此,为了支持在partials目录中包含子文件夹,您必须向应用程序添加另一个规则并定义一个函数来处理呈现此模板。如下所示:
app.js
app.get('/partials/:directory/:file', routes.subpartials);
路由/ index.js
exports.subpartials = function (req, res) {
var file = req.params.file,
directory = req.params.directory;
res.render('partials/' + directory + '/' + file);
};