I have a route that looks like this:
app.all('/path/:namedParam/*splat?',function(req,res,next){
if(!req.params.length){
// do something when there is no splat
} else {
// do something with splat
}
});
however, this doesn't work - if I call path/foo/bar
it hits the route, but if I call path/foo
, it doesn't.
Is it possible to have an optional splat param, or do I have to use a regex to detect this?
Edit:
to be clearer, here are the requirements I'm trying to achieve:
This works for /path and /path/foo on express 4, note the *
before ?
.
router.get('/path/:id*?', function(req, res, next) {
res.render('page', { title: req.params.id });
});
I just had the same problem and solved it. This is what I used:
app.get('path/:required/:optional*?', ...)
This should work for path/meow
, path/meow/voof
, path/meow/voof/moo/etc
...
It seems by dropping the /
between ?
and *
, the last /
becomes optional too while :optional?
remains optional.
Will this do what you're after?
app.all('/path/:namedParam/:optionalParam?',function(req,res,next){
if(!req.params.optionalParam){
// do something when there is no optionalParam
} else {
// do something with optionalParam
}
});
More on Express' routing here, if you haven't looked: http://expressjs.com/guide/routing.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With