Skip to content

sharkcore/tweenz

Repository files navigation

tweenz

npm (scoped) Build Status Greenkeeper badge

A small library for writing Express middleware, inspired by Pyramid tweens.

Why?

This library does the following:

  • Exposes the response body to the middleware (as part of requestDetails)
  • Provides a first class API to allow middleware to safely execute code after the request has finished

Please Note! This middleware stores the whole response body in memory. If you are returning particularly large responses, you should be aware of this.

Getting started

yarn add tweenz

A tween in tweenz looks like this:

export default () => {
    // one-time configuration code goes here

    return async (requestDetails, req, res) => {
        // code to be executed for each request before
        // the actual application code goes here

        const details = await requestDetails;

        // code to be executed for each request after
        // the actual application code goes here
    };
};

Example

Here's a tween to calculate the time taken for a request to complete:

time-logger.js

export default () => {
    return async (requestDetails, req, res) => {
        const startAt = process.hrtime();

        // wait for request to complete
        await requestDetails;

        // calculate time taken for request
        const [seconds, nanoseconds] = process.hrtime(startAt);
        const miliseconds = seconds * 1e3 + nanoseconds * 1e-6;
        console.log(`Request took ${miliseconds}ms to complete!`);
    };
};

app.js

import express from 'express';
import tweenz from 'tweenz';
import timeLogger from './time-logger';

const app = express();
app.use(tweenz(timeLogger()));

...

API

Registering tweens

tweenz(tween [, tween ...])

Tween Callback

A tween is a callback, which will get executed with the following arguments