@routes/index
Version:
📇 An index of routes exposed by Express app
109 lines (87 loc) • 2.83 kB
Markdown
# @routes/index <a href="https://www.npmjs.com/package/@routes/index"><img src="https://img.shields.io/npm/v/@routes/index.svg"></a> [](https://github.com/omrilotan/routes/tree/master/packages/index)
## 📇 An index of routes exposed by Express app

```
const app = express();
const index = require('@routes/index');
...
const filter = (method, path) => {
if (/patch/i.test(method)) { return false; }
if (path.endsWith('ping')) { return false; }
return true;
};
index(app, filter);
```
## Arguments and options
- First argument is an Expressjs app instance.
- Second, optional, argument is a named options object. All options are optional
| Name | Type | Meaning
| - | - | -
| filter | {Function} | Filter routes by method or path
| should | {Function} | For 'route' method, should it display the 404 list page or simply call next middleware
`filter` method accepts two arguments: method (lowercase), and path - respectfully (e.g. :`'get', '/users/:user_id'`)
```js
const filter = (method, path) => path.starsWith('/api');
```
`should` method accepts two arguments: request and response - the express middleware arguments
```js
const should = (request, response) => request.path.startsWith('/api');
```
## Usage
#### Example express app setup
> ```
> const express = require('express');
>
> const app = express();
> app.get('/ping', ...);
> app.get('/users/:user_id', ...);
> app.patch('/users/:user_id', ...);
> app.delete('/users/:user_id', ...);
> app.get('/users', ...);
> app.post('/users', ...);
> ```
#### Get an index of all available routes
```js
const index = require('@routes/index');
index(app);
```
| Example
| -
| 
#### Get a flat list of routes (no methods) (* de-duped)
```js
const {flat} = index(app);
flat // ['/users', '/users/:user_id']
```
#### Show API consumers an index for 404 message
```js
const {route} = index(
app,
// filter paths from the list
{
filter: (method, path) => !['/ping', '*'].includes(path),
should: (request, response) => !request.is('html'),
}
);
app.all('*', route);
```
| Example
| -
| 
Result
```sh
< HTTP/1.1 404 Not Found
< Content-Type: text/plain; charset=utf-8
< Content-Length: 290
< Date: Wed, 17 Apr 2019 21:19:32 GMT
< Connection: keep-alive
<
{ [290 bytes data]
404 error - Could not find route [GET] /missing
Here is a index of available routes:
- [GET] /users
- [POST] /users
- [GET] /users/:user_id
- [PATCH] /users/:user_id
- [DELETE] /users/:user_id
```