statikly-router
TypeScript icon, indicating that this package has built-in type declarations

0.0.11 • Public • Published

statikly-router

file system router, the router will translate folder structure into routes.

generated route for pages/todo/[id].ejs will be /pages/todo/:id

Installation

npm i statikly-router

Usage

const { Router } = require("statikly-router"); // import { Router } from "statikly-router"
const router = new Router({
  path: "views",
});
const routes = await router.scan(); // => route[]
await router.build("api"); //create api/routes.json file to cache routes

Route:

{
  "ejs": {
    "root": "/",
    "dir": "/pages/todo",
    "base": "[id].ejs",
    "ext": ".ejs",
    "name": "[id]",
    "cwd": ".../tests/views",
    "path": ".../tests/views/pages/todo/[id].ejs",
    "relative": "/pages/todo/[id].ejs",
    "url": "/pages/todo/:id"
  }
}

express usage example:

//server.js
const express = require("express");
const { Router } = require("statikly-router");

const app = express();
const router = new Router({ path: "routes", glob: "**/*.js" });

(async () => {
  try {
    console.time("scan");
    const routes = await router.scan();
    console.timeEnd("scan"); //scan: ~5ms
    for (const url in routes) {
      const route = require(routes[url].js.path);
      const methods = Object.keys(route);
      methods.forEach((method) => {
        app[method](url, route[method]);
      });
    }
    console.log("listen on localhost:4000");
    app.listen(4000);
  } catch (error) {
    console.log(error);
  }
})();
//routes/home.js
module.exports = {
  get: async (req, res) => {
    return res.json({ page: "home" });
  },
};

curl localhost:4000/home

Readme

Keywords

Package Sidebar

Install

npm i statikly-router

Weekly Downloads

0

Version

0.0.11

License

MIT

Unpacked Size

13.7 kB

Total Files

9

Last publish

Collaborators

  • niradler55