2013-08-31 20 views
5

Ich arbeite an einer Knoten App mit Express sowie Angular. Ich verwende Angular für das Routing und haben meine Routen Setup wie so:Express + Winkelrouting verursacht Endlosschleife + Absturz

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); 
}]); 

Nun wenn ich versuche, und rufen /user/home - Die Seite in eine Endlosschleife geht und hält den Controller neu zu laden. Ich kann in der Node-Konsole sehen, dass die Seite von partials/user/home aufgerufen wurde, die definitiv eine Jade-Datei enthält. Ich habe andere Beiträge überprüft, die meisten davon sind mit dem / am Anfang des Teilpfad gelöst, das hat hier nicht geholfen. Die Seite wird geladen, wenn ich home.jade in das Verzeichnis /partials ohne Unterverzeichnis übertrage. Irgendwelche Ideen?

Update: Es scheint, die Endlosschleife passiert immer, wenn ich versuche, eine partielle in einem beliebigen Unterverzeichnis von Teiltönen zu laden.

Pro Anfrage:

Node - App.js:

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

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

und Routen/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

Könnten Sie Ihre Node-Konfiguration hinzufügen? –

+0

@WillM - Hinzugefügt. – tymeJV

Antwort

2

Die Routing-Regel, die Sie für partials angegeben haben, werden nicht überein alle Anfragen an Unterverzeichnisse innerhalb des Partials-Ordners, z/Partials/Ordner/Datei. Der Routingpfad-Matcher behandelt / als Trennzeichen zwischen Variablen. Um Unterordner in Ihrem Teilverzeichnis zu unterstützen, müssen Sie daher eine weitere Regel zu Ihrer Anwendung hinzufügen und eine Funktion definieren, die das Rendern dieser Vorlage übernimmt. Dies ist unten dargestellt:

app.js

app.get('/partials/:directory/:file', routes.subpartials); 

Routen/index.js

exports.subpartials = function (req, res) { 
    var file = req.params.file, 
     directory = req.params.directory; 
    res.render('partials/' + directory + '/' + file); 
}; 
+0

Thx für die Antwort gordy. Ich bin weg von meiner Maschine für die Nacht, aber werde im AM versuchen. – tymeJV

+0

Am besten verwenden Sie in Ihrer Teilroute (*/partials/*) einen Catch all * und verwenden Sie dann req.params [0], um die angeforderte Datei zu erhalten. Wenn die Dateiverzeichnisse identisch sind, können Sie einfach den Parameter rendern. – TheSharpieOne

+0

Super Lösung. Gerade jetzt in Angular Routing, war vor kurzem mit Express alles zu handhaben. Dieses Unterverzeichnis hatte mich ein wenig verloren. Ich habe so etwas früher versucht, 'app.get ('/ partials/user /: file'', aber ich muss etwas verpasst haben. Nochmals vielen Dank! – tymeJV

12

html5Mode(true) verwenden, werden Sie sich mit irgendwelchen relativen Pfaden betreffen müssen -, die Sie verwenden, für Ihre Teiltöne.

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

auf Ihre <head>: Die Rekursion in Ihrem Fall, glaube ich, könnte durch Zugabe gelöst.

+0

sicher tat, danke dafür .. Dummer Fehler an meinem Ende dafür, relative Pfade nicht zu haben, mich dann wundernd, warum Dinge einschließlich unendlich waren. – Petrogad

+0

Ich kann nicht glauben, dass html5Mode eine TemplateUrl ändern würde, die mit einem Schrägstrich davor angegeben ist. Hätte erwartet, dass dies ein absoluter Weg ist. vor allem, weil die Ärzte dies sagen. – AlexMA

+0

Verdammt, das hat mich verrückt gemacht. :-) Vielen Dank!. – Ramp

Verwandte Themen