> Portal Navigation: > > - Append `.md` to any URL under `https://dev.wix.com/docs/` to get its markdown version. > - Pages are either content pages (article or reference text) or menu pages (a list of links to child pages). > - To get a menu page, truncate any URL to a parent path and append `.md` (e.g. `https://dev.wix.com/docs/sdk.md`, `https://dev.wix.com/docs/sdk/core-modules.md`). > - Top-level index of all portals: https://dev.wix.com/docs/llms.txt > - Full concatenated docs: https://dev.wix.com/docs/llms-full.txt # Method name: afterRouter(request: WixRouterRequest, response: WixRouterResponse) # Method package: wixRouter # Method menu location: wixRouter --> afterRouter # Method Link: https://dev.wix.com/docs/velo/events-service-plugins/routers/service-plugins/wix-router/after-router.md # Method Description: Registers a hook that is called after a router. The `afterRouter` hook is a data binding router hook that is triggered after the router with the specified [prefix](#prefixes) has bound the data, but before the page is displayed. The router can be a code router or the data binding router that binds data to a dynamic page. The `afterRouter()` function is not a function that you call from your code. You define the function in a file named **routers.js** in the Code File's Backend section of the [Velo Sidebar](https://dev.wix.com/docs/develop-websites/articles/workspace-tools/velo-workspace/workspaces/wix-editor-working-with-the-code-sidebar.md). The function is called as described above. Use this hook with a code router to change the router's response based on the data that was retrieved. For example, you can have two versions of a page, one for portrait oriented images and another for landscape oriented ones. After the image is pulled from the database, you can show the page that corresponds to the image's orientation. The function receives a [`WixRouterRequest`](wix-router.WixRouterRequest.html) object containing information about the incoming request and a [`WixRouterResponse`](wix-router.WixRouterResponse.html) object containing information about the router's response. The function returns a [`WixRouterResponse`](wix-router.WixRouterResponse.html) object that causes the router to respond with a specified page, specified data, and a success response code, or respond with any other HTTP response code. The returned response can be either the response received or a new response that overrides the one received. If the function does not return a [`WixRouterResponse`](wix-router.WixRouterResponse.html), the response received as the `response` parameter acts as the effective router response. Typically, the response is created using one of the [`ok()`](#ok), [`forbidden()`](#forbidden), [`notFound()`](#notFound), [`redirect()`](#redirect), or [`sendStatus()`](#sendStatus) functions. # Method Code Examples: *** Note: do not assume any prop names or enum values other than the ones in the example. ## After router stub ```javascript // In routers.js export function myRouter_afterRouter(request, response) { // after router code ... } ``` ## Basic after router hook ```javascript // In routers.js import {ok, forbidden} from 'wix-router'; export function myRouter_afterRouter(request, response) { if (some_condition) return ok("different-page", response.data, response.head); else if (other_condition) return response; else return forbidden(); } ``` ## After router hook that reroutes based on response data ```javascript // In routers.js import {ok} from 'wix-router'; export function myRouter_afterRouter(request, response) { if(response.status === 200 && response.page === "horizontal-pic") { if(response.data.picture.orientation === "vertical") return ok("vertical-pic", response.data, response.head); else return response; } return response; } ``` ---