A small library for writing Express middleware, inspired by Pyramid tweens.
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.
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
};
};
Here's a tween to calculate the time taken for a request to complete:
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!`);
};
};
import express from 'express';
import tweenz from 'tweenz';
import timeLogger from './time-logger';
const app = express();
app.use(tweenz(timeLogger()));
...
tweenz(tween [, tween ...])
A tween is a callback, which will get executed with the following arguments
-
requestDetails
An object of the following type:
{ responseBody: string; }
-
req
-
res