2016-05-22 13 views
1

Ich versuche, einen Authentifizierungsmechanismus für meine App zu erstellen, indem Sie Cookies überprüfen. Also habe ich die router.all('*') hinzugefügt, um jede Anfrage zu erfüllen, checke das Cookie und gehe dann zum eigentlichen Handler. Aber ich brauche nur Anfragen, die ein oder mehrere Zeichen nach '/' haben. (Ich möchte /manage, /m oder /about, aber nicht / übereinstimmen).Entsprechen Sie allen Routen außer '/' in Express

//Assuming a request for '/', this gets called first 
router.all('*', function (request, response, next) { 
    //Stuff happening 
    next(); 
}); 

//This gets called on next(), which I do not want 
router.get('/', function (request, response) { 
    //Stuff happening 
}); 

//However this I do want to be matched when requested and therefore called after router.all() 
router.post('/about', function (request, response) { 
    //Stuff happening 
}); 

Nach den Antworten here Sie Regex für den Pfad verwenden können passend, aber dann verstehe ich nicht wirklich, was '*' ist. Es könnte alles zusammenpassen, aber es sieht für mich nicht nach Regex aus.

  1. Warum '*' Spiel /?
  2. Welches Argument brauche ich, um all() zu entsprechen /about, aber nicht /?

Antwort

2

Einfach * zuletzt. Der Router prüft in der Reihenfolge der Definition. So

:

router.get('/' ... 

dann

router.all('*' ... 

Denken Sie daran, dass / für * noch gültig ist, so ein next() Anruf von / wird der Fang alle Prozess auslösen.

+1

Manchmal ist die Lösung für Ihr Problem nicht die Antwort auf Ihre Frage, aber die Lösung für das Problem. –

1

Ein Pfad, der nur aus dem Sternzeichen ('*') besteht, bedeutet "alles abgleichen", das nur den Hostnamen selbst enthält.

Um nur "etwas zu finden", verwenden Sie die Punktgruppe mit dem Plus-Operator, was bedeutet, dass "alles mindestens einmal übereinstimmen muss".

router.all(/\/^.+$/,() => { 
    // ... 
}) 
Verwandte Themen