Express.js routing: optional slpat param?


I have a route that looks like this:

    // 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?


to be clearer, here are the requirements I'm trying to achieve:

  • the first and second params are required
  • the first param is static, the second is a named param.
  • any number of optional additional params can be appended and still hit the route.
5/28/2019 4:24:15 AM

Accepted Answer

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: });
7/1/2016 4:31:17 PM

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow