Skazka

Skazka

  • Server
  • Examples
  • Github
  • Blog

›API

Introduction

  • Server

Start working

  • Server Init
  • Server Request
  • Server Response
  • Server Error Handler
  • Server Logger
  • Server Cookies Parser
  • Server Helmet

Running server

  • Server HTTP(S)

API

  • Server GraphQL
  • Server Router
  • Server Body Parser
  • Server CORS
  • Server Method Override
  • Server Virtual Host
  • Server Chaos

Database

  • Server Mongoose
  • Server MySQL
  • Server PostgreSQL
  • Server Redis

Static files

  • Server Index
  • Server Static
  • Server SPA

Creating a new modules

  • Server Module Builder
  • Server Express Wrapper

Server Router

Skazka promise based router.

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);
Last updated by EvheniyBystrov
← Server GraphQLServer Body Parser →
  • How to install
  • How to use
  • Methods
  • Chain
  • Request parameters
    • Query
    • Parameters
  • With body parser
  • With virtual host
Copyright © 2019 SkazkaJS