Reputation: 7145
I'm trying to create an authentication mechanism for my app by checking cookies. So I added the router.all('*')
to match every request, check the cookie, and then go to the actual handler. But I need it to only match requests which have one or more characters after '/'. (I want to match /manage
, /m
or /about
, but not /
).
//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
});
According to the answers here you can use regex for path matching but then I don't really understand what '*'
is. It might match everything, but it doesn't look like regex to me.
'*'
match /
? all()
to match /about
but not /
?Upvotes: 1
Views: 2958
Reputation: 27227
A path that consists of just the star character ('*'
) means "match anything", which includes just the hostname on its own.
In order to only "match something" use the dot group with the plus operator, which means "match anything at least once".
router.all(/\/^.+$/, () => {
// ...
})
Upvotes: 1
Reputation: 33161
Simply put *
last. The router checks in order of definition.
So:
router.get('/' ...
then
router.all('*' ...
Just remember that /
is still valid for *
, so a next()
call from /
will trigger the catch all process.
Upvotes: 3