Router/README.md
2025-01-04 18:38:54 -07:00

104 lines
1.9 KiB
Markdown
Executable File

# BearMetal Router
A simple router for Deno.
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
## Usage
### Basics
```ts
import Router from "@bearmetal/router";
const router = new Router();
router
.route("/users")
.get((req, ctx) => {
return new Response("GET /users");
})
.post((req, ctx) => {
return new Response("POST /users");
});
Deno.serve(router.handle);
```
### Middleware
```ts
...
router.use('/users', async (ctx, next) => {
console.log('Executing middleware');
return await next();
});
...
```
### Nested Routers
```ts
...
const nestedRouter = new Router();
nestedRouter
.route('/users')
.get((req, ctx) => {
return new Response('GET /users');
})
.post((req, ctx) => {
return new Response('POST /users');
});
router.use('/users', nestedRouter);
...
```
### Static Files
```ts
...
router.serveDirectory('dirname', '/url-root') // files from 'dirname' directory will be available at '/url-root/filename'
// To automatically locate index.html pages:
router.serveDirectory('dirWithIndexHtml', '/indexes', {showIndex: true});
// Will also generate an index if there is no index.html present in the directory
...
```
### File-based Routing
```ts
import { FileRouter } from "@bearmetal/router";
const router = new FileRouter("dirname");
Deno.listen(router.handle);
// dirname/index.ts - will be accessible at '/'
export default function (req, ctx) {
return new Response("Hello, world!");
}
// dirname/methods.ts - will be accessible at '/methods'
export const handlers = {
get() {
return new Response("Hello, world");
},
post(req, ctx) {
const data = doDataOp(req.body);
return new Response(data);
},
};
// dirname/nestedRouter.ts - will be accessible at '/nestedRouter'
import { router } from "@bearmetal/router";
const router = new Router();
export default router;
```