Skip to main content

Van Router

A small (1kb gzipped) router middleware for CSA (client-side app).

Installation

Browser

<!-- non module -->
<script src="//unpkg.com/van-router"></script>

<!-- es module -->
<script type="module">
  import { VanRouter } from "https://unpkg.com/van-router/index.esm.js";
  // code here
</script>

Nodejs

npm i van-router

Deno

import { VanRouter } from "https://deno.land/x/van_router/mod.ts";

Usage

Browser

...
<body>
  <nav>
    <a href="#/home" u-link>Home</a>
    <a href="#/about" u-link>About</a>
  </nav>
  <div id="app"></div>
  <script>
    const render = (html) => {
      document.getElementById("app").innerHTML = html;
    }
    const router = new VanRouter({ render });

    router.add("/", () => {
      return `<h1>Hello Home</h1>`;
    });

    router.add("/about", ({ html }) => {
      return html`<h1>Hello About</h1>`;
    });

    router.resolve();
  </script>
</body>
...

React (jsx)

import React from "react";
import ReactDOM from "react-dom";

const render = (elem) => {
  ReactDOM.render(elem, document.getElementById("app"));
};
const router = new VanRouter({ render });

router.add("/", () => {
  return <h1>Hello Home</h1>;
});

router.add("/about", () => {
  return <h1>Hello About</h1>;
});

router.resolve();

Middleware

...
const router = new VanRouter({ render });
router.use((ctx, next) => {
  ctx.user = "van";
  next();
});
router.add("/", (ctx) => {
  if (!ctx.user) return ctx.go("#/login");
  return `Welcome Dashboard`;
});
...

It’s Fun Project :).