2013-08-31 16 views
5

Pracuję nad aplikacją węzła za pomocą Express, a także Angular. Używam kątowa routingu i mają moje ustawienia trasy tak:Express + Routing kątowy powodujący nieskończoną pętlę + awaria

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

Teraz gdy próbuję i nazywają /user/home - Strona przechodzi w nieskończonej pętli i utrzymuje przeładowywania kontrolera. W konsoli węzła widzę, że strona została wywołana z partials/user/home, która zdecydowanie zawiera plik Jade. Sprawdziłem inne posty, większość z nich została rozwiązana z osłem / na początku ścieżki częściowej, co nie pomogło tutaj. Strona ładuje się prawidłowo, jeśli przeniesię home.jade do katalogu /partials bez podkatalogu. Jakieś pomysły?

Aktualizacja: Wygląda na to, że nieskończona pętla ma miejsce, gdy próbuję wczytać część do dowolnego podkatalogu częściowego.

Na życzenie:

Node - App.js:

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

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

i tras/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

Czy możesz dodać swoją konfigurację węzła? –

+0

@WillM - Dodano. – tymeJV

Odpowiedz

2

Reguła routingu, które zostały określone dla podszablonów nie pasują wszelkie żądania do podkatalogów w folderze partials, np/partials/folder/file. Miernik ścieżki routingu traktuje / jako separator między zmiennymi. Dlatego aby obsługiwać podfoldery w katalogu partials, musisz dodać kolejną regułę do swojej aplikacji i zdefiniować funkcję do obsługi renderowania tego szablonu. Jest to pokazane poniżej:

app.js

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

trasy/index.js

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

Thx za gordy odpowiedzi. Jestem z dala od mojej maszyny na noc, ale spróbuję w AM. – tymeJV

+0

Najlepiej użyć catch all * w swojej trasie częściowej ("/ partials/*"), a następnie użyć polecenia req.params [0], aby uzyskać żądany plik. Jeśli katalogi plików są takie same, możesz po prostu wyświetlić parametr. – TheSharpieOne

+0

Niesamowite rozwiązanie. Właśnie zaczynając nawigację Angular, korzystał ostatnio z Express do obsługi wszystkiego. Ten pod-katalog trochę mnie stracił. Próbowałem czegoś takiego wcześniej, 'app.get ('/ partials/user /: file'' ale musiałem coś przeoczyć.) Jeszcze raz dziękuję! – tymeJV

12

Korzystanie html5Mode(true), będziesz musiał martwić się o jakichkolwiek ścieżek względnych - który używasz za twoje częściowe. Rekursja w Twoim przypadku, moim zdaniem, mogły zostać rozwiązane przez dodanie:

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

aby Twój <head>.

+0

pewnie, dzięki za to .. Głupi błąd na moim końcu za brak względnych ścieżek, a następnie zastanawianie się, dlaczego rzeczy były w tym nieskończone. – Petrogad

+0

Nie mogę uwierzyć, że html5Mode zmieniłby szablon template, który jest określony za pomocą ukośnika przed nim. Spodziewałbym się, że będzie to absolutna ścieżka. zwłaszcza, że ​​tak mówią lekarze. – AlexMA

+0

Cholera, to doprowadziło mnie do szału. :-) dzięki!. – Ramp

Powiązane problemy