Tweens for Express
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
__tests__
flow-typed/npm
src
.babelrc
.eslintrc
.flowconfig
.gitignore
.travis.yml
.yarnrc
Makefile
README.md
package.json

README.md

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

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