# jm-route

> the route programming mode

Latest version **0.1.2** (published 2020-06-16) · MIT license · 0 weekly downloads

## Install

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

## Health

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

Positive: esm support; no vulnerabilities.

Warnings: low downloads; no types; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.2 |
| Published | 2020-06-16 |
| First published | 2018-07-18 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 35.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | Jeff YU |
| Maintainers | jeffyu |
| Keywords | javascript, route, jm-route |

## Links

- npm: https://www.npmjs.com/package/jm-route
- Repository: https://github.com/jm-root/ms
- Issues: https://github.com/jm-root/ms/issues
- npm.io page: https://npm.io/package/jm-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

- 0.1.2 (latest) — 2020-06-16
- 0.1.1 — 2020-06-15
- 0.1.0 — 2018-09-09
- 0.0.4 — 2018-09-07
- 0.0.3 — 2018-07-22
- 0.0.2 — 2018-07-19
- 0.0.1 — 2018-07-18

## README

# 路由式编程 jm-route

路由式编程模式，别名：流水线式编程模式

## install

```bash
npm i jm-route
```

## use

```javascript
const Route = require('jm-route')
const route = new Route(opts=>{}))
```

## 两个概念

- 工序函数 fn

- 路由 Route

## 工序函数 fn

- 成品函数

- 加工函数

- 混合函数

### 成品函数

执行完成时返回值

```
function fn1(){
    return {name: '鱼哥'}
}
```

### 加工函数

执行完成时不返回值

```
function fn1(opts){
    if(opts.name) return // 可以 return 但不返回任何值
    opts.name = '鱼哥'
}
```

### 混合函数

成品函数和加工函数的混合写法

```
function fn1(opts){
    if(opts.name) return {name: opts.name}
    opts.name = '鱼哥'
}
```

### 支持异步函数

```
function async fn1(opts){
    if(opts.name) return {name: opts.name}
    opts.name = '鱼哥'
}
```

---

## 路由 Route

一个以上工序函数的组合

### 构造函数

接受一个以上函数作为参数

```
new Route(fn)

new Route([fn1, fn2, ..., fnn]])

new Route(fn1, fn2, ..., fnn)

```

### 路由执行 execute

- 顺序执行 route 中的函数

- 遇到结果返回 promise

### 配置参数

- logging 是否打印日志，默认false

- benchmark 是否计算耗时，默认false

## 例子

### 最小例子

```javascript
// 成品函数
const fn = () => {
    return {ret: 1}
}

// 创建路由
const route = new Route(fn)
route.logging = true // 打开日志
route.benchmakr = true // 打开耗时计算

// 路由执行
const doc = await route.execute()

```

### 最小例子 async

```javascript
// 成品函数
const fn = async () => {
    return {ret: 1}
}

// 创建路由
const route = new Route(fn)

// 路由执行
const doc = await route.execute()

```

### 工序函数

```javascript
const filter1 = () => {
    console.log('加工函数')
}
const filter2 = async () => {
    console.log('异步加工函数')
}
const fn = async () => {
    return {ret: 1}
}
const route = new Route(filter1, filter2,fn)
const doc = await route.execute()

```

## 已知问题

- 异步函数比同步函数慢10倍

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