2016-05-27 13 views
0

Ich möchte, dass AngularJs mit den meisten meiner Routen fertig wird, sodass ich keine Routen in Express AND Angular gleichzeitig angeben muss. Also habe ich eine "catch all" Route wie folgt aus:Routen mit Dateierweiterung von Express-Routen ausschließen

app.use('/api', api); // server-side stuff 
app.use(express.static(__dirname + '/public')); //static files 
app.get('*', function (req, res) { //angular stuff 
    res.render('index'); 
}); 

Dann auf mein Eckige app, wenn die Route nicht existiert, ich handhaben es auf diese Weise

$routeProvider.otherwise({ 
    templateUrl: '/partials/404.html', 
    controller: 'DummyCtrl' 
}); 

Das Problem ist, dass, Wenn die Route static() nicht mit einer Datei im Öffentlichen Verzeichnis übereinstimmt, wird sie zur nächsten Route "Catch All" weitergeleitet.

Dies verursacht einige Probleme, da der Server res.render('index'); (die ganze Seite) zurückgibt, die dann in die Seite von AngularJs injiziert wird, so dass ich eine Warnung WARNING: Tried to load angular more than once. bekomme.

Ich möchte meine "Catch All" -Route neu schreiben, um nur Routen zu entsprechen, wenn sie Dateien nicht übereinstimmen.

Ich glaube, was ich brauche, ist eine Regex für die eckige Route, die Routen ausschließen würde, wenn sie wie Dateien aussehen. ZB: ausschließen ".html", " .png" usw.

+0

'^ * \ * $ ' – rock321987

Antwort

1

die Lösung hier ist:.. (?! (?: png | html) $). /\/[^.]*$|^(?:https?:)?\/\/[^\/]+$/

+0

zumindest die Frage – rock321987

+0

habe ich gelesen. Kann nichts falsch sehen. –

+1

wo es um das Finden von 'http' geht? – rock321987