Express + Angular路由导致无限循环+崩溃

tym*_*eJV 5 node.js express angularjs

我正在使用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);
}]);
Run Code Online (Sandbox Code Playgroud)

现在,每当我尝试调用时/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);
Run Code Online (Sandbox Code Playgroud)

和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);
}
Run Code Online (Sandbox Code Playgroud)

小智 12

使用时html5Mode(true),您将不得不关注任何相对路径 - 您正在使用它们的部分路径.我相信,您的案例中的递归可以通过添加以下内容来解决:

<base href="/"></base>
Run Code Online (Sandbox Code Playgroud)

到你的<head>.


Gor*_*dyD 2

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

应用程序.js

app.get('/partials/:directory/:file', routes.subpartials);
Run Code Online (Sandbox Code Playgroud)

路线/index.js

exports.subpartials = function (req, res) {
  var file = req.params.file,
      directory = req.params.directory;
  res.render('partials/' + directory + '/' + file);
};
Run Code Online (Sandbox Code Playgroud)