Search code examples
javascriptbackbone.jsrouter

Is there a way to catch all non-matched routes with Backbone?


I want to have a 'catch all' route which runs when none of the other defined routes are matched. A type of 404 NotFound error handler.

I've tried adding this, which works but prevents other routes from matching:

this.route(/(.*)/, 'notFound', this.notFound);

Anyone solved this problem before?


Solution

  • Answering here for completeness.

    You can do this 2 ways. Define the regular expression using route(), as in the question. However, due to this bug you would need to define all your routes via the route() method, and in reverse order (catchall at top). This prevents you from using the routes hash, so (my) preferred method is:

    routes: {
      'users/search': 'searchUsers',
      'users/:id': 'loadUser',
    
      '*notFound': 'notFound'
    }
    

    The key '*notFound' can actually be anything starting with *. You just require characters after the * to prevent a parsing error.