--- tags: brew-js --- # Defining routes A set of routes define what path the app can land to. The routes are matched in order and the first matched route will be used to determine the route parameters. ```typescript app.useRouter({ routes: [ '/user/{id}' '/user', '/' ] }) ``` ## Route parameter Route parameters can be used to capture a specific segment and be populated to the `app.route` dictionary. They can also be used to define dynamic routes. For example, the route `/user/{id}` will match: | Path | `app.route.id` | | --------- | -------------- | | `/user/1` | `1` | ### Optional An optional route parameter can be specified by `?` after parameter name, for example the following route will match `/user` and `/user/xxx`. ``` /user/{id?} ``` All following parameters are also considered optional after an explicitly optional parameter. For example, `action` is also optional in the following route: ``` /user/{id?}/{action} ``` ### Regex To match a segment with a certain pattern, regular expression can be specified after parameter name separated by a colon `:`. ``` /user/{id:\d+} ``` :::info In JavaScript string literal the backslash character need to be escaped as: `"/user/{id:\\d+}"` ::: The expression always match the whole segment, therefore `^` and `$` is omitted. ### Wildcard (remaining segment) The route is a match as long as the parts before `*` is matched. For example the following route will match `/user/1`, `/user/1/xxx`, `/user/1/xxx/yyy` and so on: ``` /user/{id}/* ``` And the `*` part will be populated to `app.route.remainingSegments`. | Path | `app.route.id` | `app.route.remainingSegments` | | ----------------- | -------------- | ----------------------------- | | `/user/1` | `1` | `/` | | `/user/1/xxx` | `1` | `/xxx` | | `/user/1/xxx/yyy` | `1` | `/xxx/yyy` | ## Catch-all route A catch-all route `/*` will match any paths. Add this at the end if a "page not found" screen is desired.