File size: 3,165 Bytes
befd7da
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
[![Coverage Status](https://coveralls.io/repos/github/transcovo/express-middleware/badge.svg?branch=master)](https://coveralls.io/github/transcovo/express-middleware?branch=master)
[![Circle CI](https://circleci.com/gh/transcovo/express-middleware/tree/master.svg?style=shield&circle-token=97907b31816956c5736f058b30d8ef31ea0f0eaf)](https://circleci.com/gh/transcovo/express-middleware/tree/master)

## Install

```sh
npm i express-middleware --save
```

## Middlewares

- **Available**: Request Id, Child logger, JWT Token and HTTP Access logger
- **Todo**: JWT decoder, Error handler, ...

### SSL Redirect

Force SSL redirection. Options object is optional. Two possibilities to disable redirection :

- set environment variable DISABLE_SSL_REDIRECT to `true`
- add `disable`to `true` in setup options.

```js
const sslRedirect = require('express-middleware').sslRedirect;
app.use(sslRedirect(options));
```

**Middleware dependency** : _None_

### Request Id

Add or append the request id to the `req` object.

```js
const requestId = require('express-middleware').requestId;
app.use(requestId());
```

**Middleware dependency** : _None_

### Child logger

Create a child logger and append it to the `req` object. Logger must be a bunyan instance (with the method `child`).

```js
const childLogger = require('express-middleware').childLogger;
app.use(childLogger(logger));
```

**Middleware dependency** : Request Id (optional)

### JWT Token

Append the token from header or query param to the `req` object.

Query param format is `token=<mytoken>` and header format is `Authorization: Bearer <mytoken>`.

```js
const jwtToken = require('express-middleware').jwtToken;
app.use(jwtToken());
```

**Middleware dependency** : _None_

### HTTP Access logger

Log http access properties for each request (like Apache httpd) in JSON format.

```js
const httpAccessLogger = require('express-middleware').httpAccessLogger;
app.use(httpAccessLogger(opts));
```

**Middleware dependency** : Child logger (optional if options are overridden), Request Id (optional), JWT Token (optional)

### Language

Set `req.language` according to the `Accpet-Language` header

`opts.languages` is a mandatory array, it must contains at least one language.

```js
const language = require('express-middleware').language;
app.use(language(opts));
```

**Middleware dependency** : _None_

### i18n

Parse i18n data in `req.body` using `req.language` value

```js
const i18n = require('express-middleware').i18n;
app.use(i18n());
```

**Middleware dependency** : Language middleware

### IP Blacklisting

Force IP address validation before accepting a request.

- set environment variable IP_BLACKLIST to be a list of comma separated IP addresses

```js
const ipBlacklist = require('express-middleware').blacklistIPs;
app.use(ipBlacklist());
```

**Middleware dependency** : _None_

## Contribute

```sh
npm test                # start test suites (coverage + lint + mocha)
npm run coverage        # run the code coverage tool
npm run coverage-html   # run the code coverage tool with html report
npm run lint            # execute linter tool
npm run mocha           # run the tests
```