Skip to content
On this page

Routes

Routes determine which file you should be sent to when you enter a page in the website, and it is server-sided. The routes are exported from the main file(default: /src/Server.jsx). Example routes:

jsx
// your server-sided code goes here...

export default <Routes>
    <Route path="/" route="./App.jsx"/>
</Routes>;

Route Component

* path

Route components require a path attribute that determines when it should be triggered. For example setting path to /docs and entering the page /page as in URL triggers that route.

route

The route attribute determines the file it should load which can be any type of files (JSX/TSX files will be rendered differently). Optional.

method

The method attribute determines the method of the request. GET is the default value. Case-insensitive.

allow

The allow attribute determines which files the given file can access. This attribute only makes sense for JSX/TSX files. It expects a string(file path) array or "*" or "auto". Setting it to "*" makes the file be able to access every file in the source folder. Setting it to "auto" makes it check the imports of the files the route file imports. By default, this is set to "auto".

deny

The deny attribute determines which files the given file cannot access. This attribute only makes sense for JSX/TSX files. It expects a string(file path) array or "*". Setting it to "*" makes the file not be able to access any file in the source folder. By default, this is set to [].

onRequest

The onRequest attribute determines what actions should be taken when a request is sent. It expects a function or a function list. Given function(s) should be in this format:

ts
(request: Request, response: Response, next: NextFunction, ...args: any[]) => void

If the function next is not called it stops the flow causing it to not process the give route(if given) and also stopping the remaining functions given in the onRequest attribute. This can be used to send raw JSX/TSX files like this:

jsx
export default <Routes>
    <Route path="/" onRequest={(request, response) => response.sendFile(__dirname + "App.jsx")}/>
</Routes>;

You can also communicate between the NextFunctions!

Example:

jsx
function first(req, res, next) {
    next("Hello world!", 1);
}

function second(req, res, next, text, number) {
    res.send("The text is: " + text + ", and the number is: " + number);
}

export default <Routes>
    <Route path="/" onRequest={[first, second]}/>
</Routes>;

If you want to tell it to continue for searching other routes you can use next(true):

jsx
function first(req, res, next) {
    next(true); // this will continue with the next route!
    // only works for the last onRequest function!
}

export default <Routes>
    <Route path="/" onRequest={first}/>
    <Route path="/" route="App.jsx"/>
</Routes>;

Nested Routes

Route components can include Route components inside themselves which appends the paths. An example:

jsx
export default <Routes>
    <Route path="/a">
        <Route path="/b" route="./App.jsx"/>
    </Route>
</Routes>;

This will basically append /a and /b to create /a/b path which will be routed to given ./App.jsx file.

Tip

Nested route components can append their path, allow, deny, onRequest!

Released under the MIT License. (dev)