2016-09-22 3 views
0

Da express Routen in der Reihenfolge auswertet, in der sie hinzugefügt wurden, sollten Sie zuerst die spezifischeren Routen angeben.Express Router: Alle Routen, die neue Routen zulassen

server.get('/product/:id', router.getProduct); 
server.get('/user/:id', router.getUser); 
server.get('*', router.notFound); 

Die administrative Seite der Website muss jedoch in der Lage sein, neue Abschnitte zu erstellen. Wenn ein neuer Abschnitt erstellt wird, wird er zur Datenbank hinzugefügt, und anschließend wird eine neue Route erstellt. Die Route * erfasst jedoch alles und wurde vor der neuen Abschnittsroute hinzugefügt. Daher stimmt die neue Abschnittsroute niemals überein. Wenn ich die Route * entferne, stimmen die Routen der neuen Abschnitte überein. Meine Frage ist, wie man eine Route die Übereinstimmungen auf 404 Anfragen erstellt, ohne die * Route zu verwenden. Oder gibt es eine Möglichkeit, eine Route hinzuzufügen, die immer am Ende der Routing-Matching-Reihenfolge übereinstimmt?

Jede Hilfe wird geschätzt.

+0

Wie werden Abschnitt URLs benannt? Oder ist das völlig willkürlich? – robertklep

+0

naja, es müsste der Admin sein, also ja, sie können alles eintragen was sie wollen. Zumindest ist das die Idee. Vielleicht ist die Lösung, um neu zu konfigurieren, wie Routen benannt werden? – BishopZ

Antwort

1

Da Abschnitte beliebige Namen haben, können Sie für die Gültigkeit von ihnen in den catch-all-Handler überprüfen können. Es würde davon abhängen, wie genau der Code eingerichtet ist, aber eine Idee zu geben:

server.get('/product/:id', router.getProduct); 
server.get('/user/:id', router.getUser); 
server.get('*', function(req, res, next) { 
    let sectionName = req.url.substring(1); 
    Sections.findByName(sectionName, (err, section) { 
    // Pass errors to the generic error handler. 
    if (err) return next(err); 

    // If the section isn't known, pass it along. 
    if (! section) return next(); 

    // Perform the section code here. 
    ... 
    }); 
}); 
server.use(router.notFound); 

Mit anderen Worten: die get('*') Route den Weg des Antrags würde, entfernen Sie den Schrägstrich (es sei denn, dass ein Teil der ist Abschnittsname), suchen Sie in der Datenbank nach und behandeln Sie Fehler oder unbekannte Abschnittsnamen.

Der letzte Handler erzeugt einen 404 für Anfragen, die durch den Abschnittshandler fielen.