1.0.1 • Published 4 years ago

mkserv v1.0.1

Weekly downloads
5
License
MIT
Repository
github
Last release
4 years ago

MkServ

Wrapper for Node.js HTTP module with support for Middleware.
Because there weren't enough HTTP libraries for Node.js already.

Features

  • Works
  • Tests written (need help with this!)

Example

Here's an example using the native HTTP module:

const { createServer } = require('http');

const low = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync');

const adapter = new FileSync('data/messages.json');
const db = low(adapter);

createServer((req, res) => {
  console.log(`Incoming request ${req.url}`);

  if (req.method === 'GET') {
    if (req.url === '/') {
      res.end('Hello, World!');
    } else if (req.url === '/messages') {
      res.end(JSON.stringify(db.get('messages'.value())));
    } else {
      console.log(`Cannot GET ${req.url}`);
    }
  } else if (req.method === 'POST') {
    if (req.url === '/messages') {
      req.body = [];
      req
        .on('data', chunk => {
          req.body.push(chunk);
        })
        .on('end', () => {
          req.body = Buffer.concat(req.body).toString();

          db.get('messages')
            .push(JSON.parse(req.body))
            .write();
          res.end('ok');
        });
    } else {
      console.log(`Cannot POST ${req.url}`);
    }
  } else {
    console.log(`Cannot ${req.method} ${req.url}`);
  }
}).listen(8080, () => {
  console.log('Server listening on port 8080');
});

... and here's the same example, now using MkServ:

const { mkServ, applyMiddleware, bodyMiddleware } = require('mkserv');
const { routerMiddleware, get, post } = require('mkserv-router');

const low = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync');

const adapter = new FileSync('data/messages.json');
const db = low(adapter);

db.defaults({ messages: [] }).write();

mkServ()
  .middleware((req, res, next) => {
    console.log(`Incoming request ${req.url}`);
    next();
  })
  .middleware(
    routerMiddleware([
      get('/', (req, res) => {
        res.end('Hello, World!');
      }),
      get('/messages', (req, res) => {
        res.end(JSON.stringify(db.get('messages').value()));
      }),
      post(
        '/messages',
        applyMiddleware([bodyMiddleware()], (req, res) => {
          db.get('messages')
            .push(JSON.parse(req.body))
            .write();
          res.end('ok');
        })
      )
    ])
  )
  .listen(8080, () => {
    console.log('Server listening on port 8080.');
  });

API

mkServ(): MkServInstance

Wrapper to create new MkServInstance

Returns MkServInstance

Example

mkServ()
  ...

MkServInstance.middleware(middleware: (res, req, next) => void): MkServInstance

Installs Middleware to the server

Parameters

  • middleware: (res, req, next) => void - The Middleware

Returns MkServInstance

Example

mkServ()
  .middleware((res, req, next) => {
    console.log(`Incoming request ${req.url}`);
    next();
  })
  ...

MkServInstance.listen(port: number, callback: () => void)

Start the server and listen to a specific port number

Parameters

  • port: number - The port number
  • callback: () => void - Function to call when server is listening

Example

mkServ()
  ...
  .listen(8080, () => {
    console.log('Server listening on port 8080');
  });

applyMiddleware(middlewares: Array<(req, res, next) => void>, handler: (req, res, next) => void): (req, res, next) => void

Applies a Middleware chain onto a specific Middleware function

Parameters

  • middlewares: Array<(req, res, next) => void> - The Middleware chain to apply
  • handler: (req, res, next) => void - The specific Middleware function

Returns (req, res, next) => void

Example

mkServ()
  .middleware(applyMiddleware([bodyMiddleware()], (req, res, next) => {
    console.log(`Body: ${req.body}`);
    next();
  }))
  ...

bodyMiddleware(): (req, res, next) => void

Middleware to fetch Request body

Returns (req, res, next) => void

Example

mkServ()
  .middleware(bodyMiddleware())
  ...
1.0.1

4 years ago

1.0.0

5 years ago