request-received
Version:
Route middleware for Koa and Express that adds a request received high-resolution timer and Date to the request object using easily accessible Symbols to prevent request object pollution. Made for Cabin.
136 lines (91 loc) • 3.45 kB
Markdown
# request-received
[](https://travis-ci.com/cabinjs/request-received)
[](https://codecov.io/gh/cabinjs/request-received)
[](https://github.com/sindresorhus/xo)
[](https://github.com/prettier/prettier)
[](https://lass.js.org)
[](LICENSE)
[](https://npm.im/request-received)
> Route middleware for Koa and Express that adds a request received high-resolution timer and Date to the request object using easily accessible Symbols to prevent request object pollution. Made for [Cabin][].
## Table of Contents
* [Install](#install)
* [Usage](#usage)
* [Express](#express)
* [Koa](#koa)
* [Contributors](#contributors)
* [License](#license)
## Install
[npm][]:
```sh
npm install request-received
```
[yarn][]:
```sh
yarn add request-received
```
## Usage
### Express
> Symbols are automatically added to `req` object in route middleware:
```js
const express = require('express');
const Cabin = require('cabin');
const requestReceived = require('request-received');
const responseTime = require('response-time');
const requestId = require('express-request-id');
const startAt = Symbol.for('request-received.startAt');
const startTime = Symbol.for('request-received.startTime');
const app = express();
const Cabin = new Cabin();
app.use(requestReceived);
app.use((req, res, next) => {
console.log('startAt', req[startAt]); // `process.hrtime()`
// [ 472542, 431456521 ]
console.log('startTime', req[startTime]); // Date.now()
// 1560499520000
next();
});
app.use(responseTime());
app.use(requestId());
app.use(cabin.middleware);
app.listen();
```
### Koa
> Symbols are automatically added to `ctx`, `ctx.req`, and `ctx.request` objects in route middleware:
```js
const Koa = require('koa');
const koaConnect = require('koa-connect');
const responseReceived = require('response-received');
const responseTime = require('response-time');
const requestId = require('express-request-id');
const startAt = Symbol.for('request-received.startAt');
const startTime = Symbol.for('request-received.startTime');
const app = new Koa();
const Cabin = new Cabin();
app.use(requestReceived);
app.use((ctx, next) => {
console.log('startAt', ctx[startAt]); // `process.hrtime()`
// [ 472542, 431456521 ]
console.log('startTime', ctx[startTime]); // Date.now()
// 1560499520000
// note that the symbols are also accessible via:
// ctx.req[startAt]
// ctx.request[startAt]
// ctx.req[startTime]
// ctx.request[startTime]
return next();
});
app.use(koaConnect(responseTime));
app.use(requestId());
app.use(cabin.middleware);
app.listen();
```
## Contributors
| Name | Website |
| -------------- | -------------------------- |
| **Nick Baugh** | <http://niftylettuce.com/> |
## License
[MIT](LICENSE) © [Nick Baugh](http://niftylettuce.com/)
##
[npm]: https://www.npmjs.com/
[yarn]: https://yarnpkg.com/
[cabin]: https://cabinjs.com