2013-08-31 54 views
5

我正在使用Express以及Angular处理Node应用程序。我采用了棱角分明的路由,并有我的路线设置,如下所示:Express +角度路由导致无限循环+崩溃

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文件。我查了其他帖子,其中大部分都是在部分路径开始时用屁股/解决的,这在这里没有帮助。如果我将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); 
} 
+0

你可以添加你的节点配置吗? –

+0

@WillM - 已添加。 – tymeJV

回答

2

已为谐音不会匹配指定的路由规则任何对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); 
}; 
+0

Thx为回应gordy。我离开我的机器过夜,但会尝试在AM。 – tymeJV

+0

最好在你的部分路径('/ partials/*')中使用catch全部*,然后使用req.params [0]来获取请求的文件。如果文件目录是相同的,你可以渲染参数。 – TheSharpieOne

+0

真棒解决方案。刚刚进入Angular路由,最近使用Express来处理所有事情。这个子目录让我不知所措。我早些时候尝试过这样的事情,'app.get('/ partials/user /:file''但是我一定错过了一些东西。再次感谢! – tymeJV

12

使用html5Mode(true),你将有任何相对路径担心自己 - 你正在使用为你的偏见。你的情况递归,我相信,可能已经解决了通过添加:

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

<head>

+0

确实做到了;感谢这个......在我的最后没有相对路径的愚蠢错误然后想知道为什么事物包括无限的。 – Petrogad

+0

我不能相信html5Mode会改变在它前面用斜线指定的templateUrl。本来预计这是一条绝对的道路。特别是自文档如此说。 – AlexMA

+0

该死的这让我疯狂。 :-) 谢谢!。 – Ramp