Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sharkcore/tweenz
Tweens for Express
https://github.com/sharkcore/tweenz
express middleware node nodejs pyramid tween
Last synced: about 2 months ago
JSON representation
Tweens for Express
- Host: GitHub
- URL: https://github.com/sharkcore/tweenz
- Owner: sharkcore
- Created: 2017-11-30T02:13:49.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2020-06-02T23:46:55.000Z (over 4 years ago)
- Last Synced: 2024-04-26T03:21:21.006Z (7 months ago)
- Topics: express, middleware, node, nodejs, pyramid, tween
- Language: JavaScript
- Size: 118 KB
- Stars: 7
- Watchers: 4
- Forks: 1
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-express - tweenz - A library for writing Express middleware, inspired by Pyramid tweens. (Middleware)
README
# tweenz
[![npm (scoped)](https://img.shields.io/npm/v/tweenz.svg)](https://yarn.pm/tweenz)
[![Build Status](https://travis-ci.org/sharkcore/tweenz.svg?branch=master)](https://travis-ci.org/sharkcore/tweenz)
[![Greenkeeper badge](https://badges.greenkeeper.io/sharkcore/tweenz.svg)](https://greenkeeper.io/)A small library for writing [Express](https://expressjs.com/) middleware, inspired by
[Pyramid tweens](https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/hooks.html#registering-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
```bash
yarn add tweenz
```A tween in `tweenz` looks like this:
```js
export default () => {
// one-time configuration code goes herereturn async (requestDetails, req, res) => {
// code to be executed for each request before
// the actual application code goes hereconst 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
```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
```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
- **`requestDetails`**
An object of the following type:
```js
{
responseBody: string;
}
```- **`req`**
[Express request object](http://expressjs.com/en/api.html#req)
- **`res`**
[Express response object](http://expressjs.com/en/api.html#res)