0.0.2 • Published 4 years ago

@skazka/server-virtual-host v0.0.2

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

Server Virtual Host

Skazka Server Virtual Host helps to work with different domains splitting http / https protocols.

NPM

How to install

npm i @skazka/server @skazka/server-virtual-host

With yarn:

yarn add @skazka/server @skazka/server-virtual-host

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

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

With yarn:

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

How to use

HTTP:

vhost.http('skazkajs.org').then(async ctx => {
  ctx.response('response');
});

HTTPS:

vhost.https('skazkajs.org').then(async ctx => {
  return ctx.response('response'); 
});

Any host:

vhost.any('*.skazkajs.org').then(async ctx => {
  return ctx.response('response');     
});

All methods are wrappers for catch() method:

vhost.catch({ domain, protocol: '*|http|https' }).then(async ctx => {
  return ctx.response('response');     
});

Examples

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 server = require('@skazka/server-http');
        
const app = new App();
const router = new Router();
const vhost = new VirtualHost();
        
app.all([
  error(),
  logger(),
  request(),
  response(),
]);
    
app.then(async (ctx) => {
  // code for each request
});
    
router.get('/data').then(async (ctx) => {
  return ctx.response('data'); 
});

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

app.then(vhost.resolve());
        
server.createHttpServer(app);

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 server = require('@skazka/server-http');
        
const app = new App();
const router = new Router();
const vhost = new VirtualHost();
        
app.all([
  error(),
  logger(),
  request(),
  response(),
]);
    
app.then(async (ctx) => {
  // code for each request
});
    
router.get('/data').then(async (ctx) => {
  return ctx.response('data'); 
});

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

app.then(vhost.resolve());
        
const options = {
  key: readFileSync(resolve(__dirname, 'ssl', 'key.pem')),
  cert: readFileSync(resolve(__dirname, 'ssl', 'cert.pem'))
};
        
server.createHttpsServer(options, app);

Single Page Application (SPA)

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 server = require('@skazka/server-http');

const index = require('@skazka/server-index');
const serve = require('@skazka/server-static');
const spa = require('@skazka/server-spa');

const app = new App();
const router = new Router();
const vhost = new VirtualHost();

const root = resolve(__dirname, 'dist');

app.all([
  error(),
  logger(),
  request(),
  response(),
  index({ root }),
]).then(serve({ root, index: false }));
    
app.then(async (ctx) => {
  // code for each request
});
    
router.get('/data').then(async (ctx) => {
  return ctx.response('data'); 
});

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

app.then(vhost.resolve());

app.then(spa({ root }));

server.createHttpServer(app);

Subdomains

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 server = require('@skazka/server-http');

const serve = require('@skazka/server-static');
const spa = require('@skazka/server-spa');

const app = new App();
const router = new Router();
const vhost = new VirtualHost();

const root = resolve(__dirname, 'dist');

app.all([
  error(),
  logger(),
  request(),
  response(),
]);

router.get('/users').then(async (ctx) => {
  return ctx.response([{ id: 1 }, { id: 2 }]); 
});

vhost.http('skazkajs.org').then(spa({ root }));
vhost.http('cdn.skazkajs.org').then(serve({ root }));
vhost.http('api.skazkajs.org').then(router.resolve());

app.then(vhost.resolve());
        
server.createHttpServer(app);

Redirect from http to https

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 server = require('@skazka/server-http');

// HTTP

const app = new App();
const vhost = new VirtualHost();
        
app.all([
  error(),
  logger(),
  request(),
  response(),
]);

vhost.http('skazkajs.org').then(ctx => ctx.redirect('https://skazkajs.org/'));

app.then(vhost.resolve());

server.createHttpServer(app, 80);

// HTTPS

const appSSL = new App();
const routerSSL  = new Router();
const vhostSSL  = new VirtualHost();

appSSL.all([
  error(),
  logger(),
  request(),
  response(),
]);

appSSL.then(async (ctx) => {
  // code for each request
});
    
routerSSL.get('/data').then(async (ctx) => {
  return ctx.response('data'); 
});

vhostSSL.https('skazkajs.org').then(routerSSL.resolve());

appSSL.then(vhostSSL.resolve());
        
const options = {
  key: readFileSync(resolve(__dirname, 'ssl', 'key.pem')),
  cert: readFileSync(resolve(__dirname, 'ssl', 'cert.pem'))
};
        
server.createHttpsServer(options, appSSL, 443);