@skazka/server-router

0.0.3 • Public • Published

Server Router

Skazka promise based router.

NPM

How to install

npm i @skazka/server @skazka/server-router

With yarn:

yarn add @skazka/server @skazka/server-router

Optionally you can add http server, error handler, logger, request and response:

npm i @skazka/server-http @skazka/server-error @skazka/server-logger @skazka/server-request @skazka/server-response

With yarn:

yarn add @skazka/server-http @skazka/server-error @skazka/server-logger @skazka/server-request @skazka/server-response

How to use

const App = require('@skazka/server');
const Router = require('@skazka/server-router');
        
const error = require('@skazka/server-error');
const logger = require('@skazka/server-logger');

const request = require('@skazka/server-request');
const response = require('@skazka/server-response');
        
const server = require('@skazka/server-http');
        
const app = new App();
const router = new Router();
        
app.all([
  error(),
  logger(),
  request(),
  response(),
]);
    
router.get('/data').then(async (ctx) => {
  return ctx.response('data');
});
        
app.then(router.resolve());
        
server.createHttpServer(app);

Methods

  • all(url)
  • head(url)
  • options(url)
  • get(url)
  • post(url)
  • patch(url)
  • post(url)
  • delete(url) or del(url)

All methods are wrappers for catch() method:

catch({ method: 'GET', url: '/' })

router.catch().then(async (ctx) => {
  return ctx.response('data');
});
    
router.catch({ method: 'POST' }).then(async (ctx) => {
  return ctx.response('data');
});
    
router.catch({ url: '/data' }).then(async (ctx) => {
  return ctx.response('data');
});
    
router.catch({ method: 'POST', url: '/data' }).then(async (ctx) => {
  return ctx.response('data');
});

Chain

You can use chain of methods:

router.get('/').then(async (ctx) => {
  return ctx.response('data');
}).post('/data').then(async (ctx) => {
  return ctx.response('data');
});

Request parameters

Query

url: /?data=test

router.get('/').then(async (ctx) => {
  return ctx.response(ctx.request.query.data); // test
});

Parameters

url: /test/125

router.get('/test/:id').then(async (ctx) => {
  return ctx.response(ctx.request.params.id); // 125
});

With body parser

const bodyParser = require('@skazka/server-body-parser');

router.post('/test/:id').then(async (ctx) => {
  const body = await bodyParser.json(ctx);
  
  return ctx.response(body);
  
  // Or 
  // return ctx.response(ctx.request.body);
});

With virtual host

const App = require('@skazka/server');
const Router = require('@skazka/server-router');
const VirtualHost = require('@skazka/server-virtual-host');
        
const error = require('@skazka/server-error');
const logger = require('@skazka/server-logger');

const request = require('@skazka/server-request');
const response = require('@skazka/server-response');
const bodyParser = require('@skazka/server-body-parser');
        
const server = require('@skazka/server-http');
        
const app = new App();
const router = new Router();
        
app.all([
  error(),
  logger(),
  request(),
  response(),
]);

const vhost = new VirtualHost();

router.post('/test/:id').then(async (ctx) => {
  await bodyParser.json(ctx);
  
  return ctx.response(ctx.request.body);
});

vhost.http('skazkajs.org').then(router.resolve());

app.then(vhost.resolve());

server.createHttpServer(app);

Or with SSL:

const { readFileSync } = require('fs');
const { resolve } = require('path');

const App = require('@skazka/server');
const Router = require('@skazka/server-router');
const VirtualHost = require('@skazka/server-virtual-host');
        
const error = require('@skazka/server-error');
const logger = require('@skazka/server-logger');

const request = require('@skazka/server-request');
const response = require('@skazka/server-response');
const bodyParser = require('@skazka/server-body-parser');
        
const server = require('@skazka/server-http');
        
const app = new App();
const router = new Router();
        
app.all([
  error(),
  logger(),
  request(),
  response(),
]);

const vhost = new VirtualHost();

router.post('/test/:id').then(async (ctx) => {
  await bodyParser.json(ctx);
  
  return ctx.response(ctx.request.body);
});

const options = {
  key: readFileSync(resolve(__dirname, 'ssl', 'key.pem')),
  cert: readFileSync(resolve(__dirname, 'ssl', 'cert.pem')),
};

vhost.https('skazkajs.org').then(router.resolve());

app.then(vhost.resolve());

server.createHttpsServer(options, app);

Package Sidebar

Install

npm i @skazka/server-router

Weekly Downloads

4

Version

0.0.3

License

MIT

Unpacked Size

9.69 kB

Total Files

4

Last publish

Collaborators

  • evheniy.bystrov
  • skazkajs