You can't use two routes with the same path an type (credits goes to Haris, who wrote that already), but you can make better usage of router, I'd use is like (pseudo code)
GET /products getAllProducts()
GET /products/:catId getProductsByCat(catId)
GET /products/:catId/:id getSingleProductWithinCat(catId, id)
So you'll have i.e. /products
> /products/toys
> /products/toys/rc-plane
Of course you can still add your optional params to it:
GET /products/toys?start=10&maxresults=250
Remember that these are GET
routes = and it's normal that normal user will try to modify it manually to fasten the search, so if /products/toys/rc-plane
won't satisfy him, he'll try first to go level up to /products/toys
again