# mocker-server-cli

> mockServer

Latest version **1.1.11** (published 2022-03-04) · ISC license · 0 weekly downloads

## Install

```sh
npm install mocker-server-cli
pnpm add mocker-server-cli
yarn add mocker-server-cli
bun add mocker-server-cli
```

Provides the command `mocker-server-cli`.

## 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.11 |
| Published | 2022-03-04 |
| First published | 2022-03-02 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 6 |
| Unpacked size | 480.7 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| Author | likuan |
| Maintainers | eshop35 |
| Keywords | env, mock, mock-server |

## Links

- npm: https://www.npmjs.com/package/mocker-server-cli
- npm.io page: https://npm.io/package/mocker-server-cli

## Dependencies (6)

- [yargs](https://npm.io/package/yargs.md) ^14.0.0
- [lodash](https://npm.io/package/lodash.md) ^4.17.15
- [mockjs](https://npm.io/package/mockjs.md) ^1.0.1-beta3
- [nodemon](https://npm.io/package/nodemon.md) ^2.0.7
- [json-server](https://npm.io/package/json-server.md) ^0.14.0
- [express-http-proxy](https://npm.io/package/express-http-proxy.md) ^1.6.2

## Alternatives

- [replicas-cli](https://npm.io/package/replicas-cli.md) — 3.0K weekly downloads
- [env-contract](https://npm.io/package/env-contract.md) — 133 weekly downloads
- [@openveo/api](https://npm.io/package/@openveo/api.md) — 61 weekly downloads
- [@ryniaubenpm2/cumque-error-reiciendis](https://npm.io/package/@ryniaubenpm2/cumque-error-reiciendis.md) — 54 weekly downloads
- [ts-global-type-extra](https://npm.io/package/ts-global-type-extra.md) — 11 weekly downloads

## Recent versions

- 1.1.11 (latest) — 2022-03-04
- 1.1.10 — 2022-03-04
- 1.1.9 — 2022-03-04
- 1.1.8 — 2022-03-03
- 1.1.7 — 2022-03-03
- 1.1.6 — 2022-03-03
- 1.1.5 — 2022-03-03
- 1.1.4 — 2022-03-03
- 1.1.3 — 2022-03-03
- 1.1.2 — 2022-03-03
- 1.1.1 — 2022-03-03
- 1.0.1 — 2022-03-02
- 1.0.0 — 2022-03-02

## README

## 超级实用的MOCK server 服务


### 全局模式使用


1. 全局安装依耐：nodemon

```
npm install nodemon -g
npm install mocker-server-cli -g

```

2. 退出目录，然后在任意目录下

```
mocker-server-cli

```

3. 命令行参数，--port 设置端口 --docs开启文档，如下：

```
mocker-server-cli --port 8899 --docs

```


#### 1、模板

mockServer.js文件中，
如果是：const mockServer = new MockServer({ dir: `${join(__dirname)}/mock` })
则，在/mock 文件夹下，新建任意以.js结尾的文件,系统将自动读取这些文件,文件内容为：
```js
module.exports = {
  'get /demo': {
    status: 0,
    message: '退出',
    data: {}
  }
}

```
#### 2、key：键名的定义：键名为字符串，"{请求方式} {请求路径}"，如："get /api/test"

批量定义请用“,”隔开，如："get /api/test,get /api/test2,get /api/test3"
以下将会成功模拟出三个接口！！！

```js
module.exports = {
  "get /api/test,get /api/test2,get /api/test3": {
    status: 0,
    message: '退出',
    data: {}
  }
}

```
#### 3、vaule：值为对象或或函数

```js
module.exports = {
  "get /dome": {
    status: 0,
    message: '退出',
    data: {}
  },
  //或
  "get /dome2": ()=>{
    return {
      status: 0,
      message: '退出',
      data: {}
    }
  }
}
```
#### 4、sleep：睡眠，接口延时返回功能
以下代码，接口将3秒后返回结果
```js
module.exports = {
  "get /dome": {
    sleep: 3000,
    status: 0,
    message: '退出',
    data: {}
  }
}
```
#### 4、filter或handle：数据过滤或数据处理，对返回的值预先处理，filter或handle可以为异步函数

```js
module.exports = {
  'get /demo': {
    //支持额外的数据过滤函数，有三个参数[req:请求体,res:响应体,data:对应的对象]
    filter({ originalUrl = '',...q }, res, resData) {
      if (originalUrl.includes('/2')) {
        //返回数据为：id===2的数组
        return {
          ...resData,
          data:resData.data.filter( item => item.id===2 )
        }
      }
      return resData
    },
    status: 0,
    message: '',
    data: {}
  },
  'get /demo2': {
    //filter或handle 可以是异步函数
    async filter({ originalUrl = '',...q }, res, resData) {
      let sleep=()=>new Promise(resolve => {
        setTimeout(()=>{
          resolve()
        },3000)
      })
      await sleep()
      if (originalUrl.includes('/2')) {
        //返回数据为：id===2的数组
        return {
          ...resData,
          data:resData.data.filter( item => item.id===2 )
        }
      }
      return resData
    },
    status: 0,
    message: '',
    data: {}
  },
}
```
#### 5、支持mock语法：常用有 "@id","@name","@cname","@image","@time","@data","@address"...

更多详情 [mockjs官网](https://github.com/nuysoft/Mock/wiki)

```js
module.exports = {
  'get /demo': {
    status: 0,
    message: '',
    data: {
      "id":"@id", //随机id
      "role|1":["admin","user"], //数组中随机一个值
      "userLisr|10":[{
        "id|+1":1 // 累加
      }] //随机10条数据
    }
  }
}
```
#### 5、路由规则，自动识别 /*

注意：能自动识别常用的6种格式:
- 最后面为 /\*，如：/demo/*,
- 倒数第二级 /\*，如：/demo/*/test,
- 倒数第三级 /\*，如：/demo/*/test/test2
- 倒数两级都为/\*，如：/demo/\*/*
- 倒数三级和最后都为/\*，如：/demo/\*/n/*
- 倒数三级都为/\*，如：/demo/\*/*/*

如果超出以上范围：请在请求request.query添加routerRule，告诉系统将匹配的键，例如：
例如：http://127.0.0.1:8022/demo/a/b?routerRule=/demo/:id/:name
或者：http://127.0.0.1:8022/demo/a/b?routerRule=/demo/*/*
或者：http://127.0.0.1:8022/demo/a/b?routerRule=/demo/${id}/${name}

```js
module.exports = {
  //自动匹配
  'get /demo/*/*': {
    status: 0,
    message: '',
    data: {
      "id":"@id", //随机id
    }
  },
  // 带:的路由，无法识别，需要通过request.query.routerRule='get_demo_:id_:name',告诉系统
  // 发出请，应该为：api.get('/demo/11/likuan?routerRule=get_demo_:id_:name')
  'get /demo/:id/:name': {
    status: 0,
    message: '',
    data: {
      "id":"@id", //随机id
    }
  }
}
```

#### 6、支持将某个接口设为代理

```js
module.exports = {
  'get /sansi/api/getuserinfo': {
    //原本返回的数据
    status: 0,
    message: '',
    // 现在想代理到另一台机器上的同一路径的资源，只要加上proxy:'127.0.0.1:3436'
    // 如果代理，再访问此地址：127.0.0.1:8022/db/get/sansi/api/getuserinfo，
    // 将呈现 127.0.0.1:3436/sansi/api/getuserinfo 的数据
    proxy:'127.0.0.1:3436',
  },

}
```

## 最后

祝你使用愉快！有任何问题请联系我！

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