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

0.0.12 • 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-stack/router

Weekly Downloads

0

Version

0.0.12

License

MIT

Unpacked Size

13.7 kB

Total Files

12

Last publish

Collaborators

  • niradler55