109 lines
2.1 KiB
Markdown
Executable File
109 lines
2.1 KiB
Markdown
Executable File
# BearMetal Router
|
|
|
|
A simple router for Deno.
|
|
|
|
[](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
|
|
|
|
**Note:** _This is an experimental feature and may change in the future.
|
|
Currently, JSR does not support dynamic imports for external modules in Deno. In
|
|
order to use this feature, you will need to install as an HTTP module (available
|
|
soon)._
|
|
|
|
```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;
|
|
```
|