ponaserv

A mini but opinionated framework for your express apps.

Usage no npm install needed!

<script type="module">
  import ponaserv from 'https://cdn.skypack.dev/ponaserv';
</script>

README

ponaserv

Easily map routes to request handlers.

How to use

const ponaserv = require('ponaserv');
const express = require('express');
const path = require('path');

const app = express();

ponaserv(path.join(__dirname, './services'), app);

app.listen(3000, () => {
  console.log('App listening on port 3000');
});

Service example

const express = require('express');

module.exports = {
  name: 'hello-world',
  routes: {
    'GET /': 'sayHello',
    'GET /:message': 'specialHello',
    'POST /': 'jsonIsCool',
    'GET /math': 'math',
  },
  actions: {
    sayHello(req, res) {
      res.send('Hello World!');
    },
    specialHello(req, res) {
      const { message } = req.params;
      res.send(message.toUpperCase());
    },
    jsonIsCool: {
      middleware: [express.json()],
      handler(req, res) {
        const { body } = req;
        res.send({ yourData: body });
      }
    },
    math: {
      middleware: [express.json()],
      params: {
        a: 'number',
        b: 'number',
        $strict: true,
      },
      handler(req, res) {
        const params = {...req.params, ...req.body, ...req.query};
        res.send(this.calc(params.a, params.b));
      }
    }
  },
  methods: {
    calc(a, b) {
      return a + b;
    }
  }
}

Api

ponaserv(app, opts)

Loads js files ending in .service.js as services.

parameter description
app express app
opts.services absolute path to your services directory
opts.debug set to true if you want debug logs