node package manager

midori

midori

Minimalist, composable http apps for http/express/hapi.

build status coverage license version downloads

Usage

Install midori and add it to your package.json file:

npm install --save midori

These middleware components are NOT the same as express middleware; they are conceptually designed in a manner more similar to redux stores. Every middleware is an object with properties corresponding to events on an http.Server object; e.g. request, error, upgrade, etc. Each middleware function takes an existing middleware object and composes it.

For example, adding a req.message field:

function addMessage(message) {
  // Take in the existing middleware here 
  return (middleware) => {
    const { request } = middleware;
    // Return a new middleware here. 
    return {
      ...middleware,
      request(req, res) {
        req.message = message;
        // Composition! 
        request(req, res);
      },
    };
  };
}
 
// Create the composed middleware. 
const app = addMessage('hello')({
  // Your "base" middleware. 
  request(req, res) {
    res.statusCode = 200;
    res.end(`Message: ${req.message}`);
  }
});
 
// Create the server and use the appropriate methods on the middleware object. 
const server = http.createServer();
server.on('request', app.request);
server.listen();

In that sense http middleware is even less opinionated than express middleware. It is merely a composition mechanism for a previously non-composable set of functions (http server events).

With http

import http from 'http';
import connect from 'midori/connect';
import empty from 'midori/empty';
 
const server = http.createServer();
const createApp = empty;
const app = createApp({
  request(req, res) {
    res.statusCode = 200;
    res.end(`Hello ${req.id}`);
  },
  error(err) {
    console.log('GOT ERROR', err);
  },
});
 
connect(app, server).listen(8080);

With express

import express from 'express';
import connector from 'midori-express';
import empty from 'midori/empty';
 
const createMiddleware = empty();
const app = express();
 
app.use(connector(createMiddleware));
app.listen(8080);

With hapi

import {Server} from 'hapi';
import connector from 'midori-hapi';
import empty from 'midori/empty';
 
const createMiddleware = empty();
const server = new Server();
 
server.connection({port: 8080});
server.ext(connector(createMiddleware));
server.start();