# 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; ```