5

我正在使用 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 文件。我检查了其他帖子,其中大多数都/在部分路径的开头用 ass 解决了,这在这里没有帮助。如果我转移home.jade/partials没有子目录的目录,页面加载正常。有任何想法吗?

更新:似乎每当我尝试在部分的任何子目录中加载部分时都会发生无限循环。

根据请求:

节点——App.js:

app.get('/', routes.index);

app.get('/partials/:name', routes.partials);
app.get('*', routes.index);

和路线/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);
}
4

2 回答 2

12

使用html5Mode(true),您将不得不关注您用于部分的任何相对路径。我相信,在你的情况下,递归可以通过添加来解决:

<base href="/"></base>

到你的<head>.

于 2013-10-23T23:16:55.757 回答
2

您为 partials 指定的路由规则将不匹配对 partials 文件夹中子目录的任何请求,例如 /partials/folder/file。路由路径匹配器将/其视为变量之间的分隔符。因此,为了支持在您的 partials 目录中有子文件夹,您必须向您的应用程序添加另一个规则并定义一个函数来处理呈现此模板。如下所示:

应用程序.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);
};
于 2013-09-01T03:07:45.567 回答