# split-route

> Express middleware builder used to split behavior in route

Latest version **1.1.0** (published 2022-02-15) · MIT license · 0 weekly downloads

## Install

```sh
npm install split-route
pnpm add split-route
yarn add split-route
bun add split-route
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.0 |
| Published | 2022-02-15 |
| First published | 2022-02-13 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 14.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | darkgraycat |
| Maintainers | darkgraycat |
| Keywords | express, split, route, middleware, builder |

## Links

- npm: https://www.npmjs.com/package/split-route
- npm.io page: https://npm.io/package/split-route

## Alternatives

- [express-promise-router](https://npm.io/package/express-promise-router.md) — 736.1K weekly downloads
- [next-usequerystate](https://npm.io/package/next-usequerystate.md) — 29.8K weekly downloads
- [@bitkyc08/opencodex](https://npm.io/package/@bitkyc08/opencodex.md) — 4.6K weekly downloads
- [lynkr](https://npm.io/package/lynkr.md) — 575 weekly downloads
- [baremetal.js](https://npm.io/package/baremetal.js.md) — 42 weekly downloads

## Recent versions

- 1.1.0 (latest) — 2022-02-15
- 1.0.0 — 2022-02-13

## README

# split-route
### _Express middleware builder that can split behavior in single route_

<hr/> 
<br/>

# Install
```bash
npm install split-route
```

# Usage

### Simple calculator app
```js
const app = require('express')();
const splitRoute = require('split-route');

app.use('/:a/:operator/:b', 
  
  // middleware that inits state
  (req, res, next) => { res.state = req.params.a; next(); },

  // call builder with callback that returns 'operator' param
  splitRoute((req, res) => req.params.operator)
    // if operator == plus
    .case('plus', (req, res, next) => { res.state += req.params.b; next(); })
    // if operator == minus
    .case('minus', (req, res, next) => { res.state -= req.params.b; next(); })
    // if operator != plus && operator != minus
    .default((req, res, next) => { console.warn('invalid operator'); next(); })
    // return builded middleware
    .end(),
  
  // simple controller
  (req, res) => { res.send(res.state) }
);
```

### Splitter inside splitter
```js
app.use('/',
  // ...
  splitRoute(cb) // 'cb' may return a, b or c
    .case('a', middlewareA1, middlewareA2)
    .case('b', middlewareB1, middlewareB2)
    .case('c', splitRoute(cb) // 'cb' may return 1 or 2
      .case(1, middlewareC1)
      .case(2, middlewareC2)
      .default(middlewareC0).end()
    ).end()
  //...
  controller
);
```

---
_Source: https://npm.io/package/split-route · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
