@zaeny/http

1.0.9 • Public • Published

@zaeny/http

npm version npm downloads

Simple HTTP Server in node.js

Translate incomin http request into data strcuture like ring in clojure
Provide basic funcitonal programming utility creating http server

Getting started

npm i @zaeny/http

Usage

basic http server, with handler accept returning object {status, headers, body}

var { createServer, startServer, response } = require('@zaeny/http');
var mainHandler = (req, res) => ({ status: 200, headers: {}, body: 'hello world'});
var server =  createServer({ port: 8081, handler: (req, res) => mainHandler(req, res)})
startServer(server);

basic response with utility functions

var { createServer, startServer, response } = require('@zaeny/http');
var handler = (req, res) => response('hello world');
var server =  startServer(createServer({ port: 8081, handler: (req, res) => mainHandler(req, res)}));

create simple routing

var responseIndex = (req, res) => findFile('./index.html');
var getUser = (req, res) => response('fetch all  user');

var mainHandler = (req, res) => {
  let routes = {
    `GET /`: responseIndex,
    `GET /api/user`: getUser
  }
  let resolve = routes[`${req.method} ${req.path}`];
  if(resolve) return resolve(req, res);
  return notFound();
}

var server = server || startSever(
  createServer({ port: 8081, handler: (req, res) => mainHandler(req, res)})
);

usage with @zaeny/clojure.core

var {threadFirst, assoc} = require('@zaeny/clojure.core');

var info = (req, res) => response('hello world');

var server = threadFirst(
  { port: 8081, handler: info },
  createServer,
  startServer
);

basic routing

var routes = () => ({
  'GET /api/audio/chapter/:id': 'handleGetAudioByChapter',
  'GET /asset/:id': 'serveAudioAssets'  
});

var resolve = {
  serveAudioAssets,
  handleGetAudioByChapter
}

var mainHandler = (req, res) => {
  let found = findRoutes(routes(), req);
  if(found && resolve[found]){
    return resolve[found](req, res);
  }
  return notFound('404');
}

var server = threadFirst(
  { port: 8081, handler: mainHandler },
  createServer,
  startServer
);

testing from repl, createRequest to test the handler

await handler(createRequest('GET /api/search?query=Aziz'));

// create requst with headers 
createRequest('GET /api/users', {headers: {'Authorization': 'Basic aziz=pass'}});

API

  createServer,
  startServer,
  stopServer,
  getServer,
  response,
  redirect,
  created,
  badRequest,
  notFound,
  status,
  header,
  headers,
  contentType,
  cors,
  isContentType,
  responseWrite,
  clientRequest,
  responseBuffer,
  responseWith,
  readFile,
  findFile,
  mimeType,
  findRoutes,
  createRequest,
  notModified

Related work

  • Composable - Collection of functions to solve programming problem

Changes

  • [1.0.0] expose common api dealing with creating http server
  • [1.0.1] add findRoutes utility basic routing GET /api/audio/:id, params matching and stringify body request if json
  • [1.0.2] add support for async handler
  • [1.0.3] add support buffer non string request
  • [1.0.4] fix contentType should return not headers
  • [1.0.5] add createRequest to mockup request call
  • [1.0.6] add notModified and fix request parser
  • [1.0.8] add fix requst.body parse if empty dont parse
  • [1.0.9] add parsing request body, add improvement processing response

Package Sidebar

Install

npm i @zaeny/http

Weekly Downloads

102

Version

1.0.9

License

ISC

Unpacked Size

16.8 kB

Total Files

4

Last publish

Collaborators

  • azizzaeny