# jsx-mock-server

> ``` npm i jsx-mock-server -g ``` 全局安装即可 ## 使用说明 命令行中使用如下命令获取帮助 ``` mock-server --help ``` 返回 ``` Usage: mock-server [options]

Latest version **1.0.4** (published 2021-07-01) · ISC license · 0 weekly downloads

## Install

```sh
npm install jsx-mock-server
pnpm add jsx-mock-server
yarn add jsx-mock-server
bun add jsx-mock-server
```

Provides the command `mock-server`.

## 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.0.4 |
| Published | 2021-07-01 |
| First published | 2021-05-14 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 8 |
| Unpacked size | 13.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | jyx1577 |

## Links

- npm: https://www.npmjs.com/package/jsx-mock-server
- npm.io page: https://npm.io/package/jsx-mock-server

## Dependencies (8)

- [react](https://npm.io/package/react.md) ^17.0.2
- [yargs](https://npm.io/package/yargs.md) ^17.0.1
- [express](https://npm.io/package/express.md) ^4.17.1
- [shelljs](https://npm.io/package/shelljs.md) ^0.8.4
- [react-jsx](https://npm.io/package/react-jsx.md) ^1.0.0
- [console-color-mr](https://npm.io/package/console-color-mr.md) ^2.0.2
- [node-require-jsx](https://npm.io/package/node-require-jsx.md) ^0.1.1
- [express-http-proxy](https://npm.io/package/express-http-proxy.md) ^1.6.2

## Recent versions

- 1.0.4 (latest) — 2021-07-01
- 1.0.3 — 2021-06-30
- 1.0.2 — 2021-05-20
- 1.0.1 — 2021-05-14
- 1.0.0 — 2021-05-14

## README

## 安装
```
npm i jsx-mock-server -g
```
全局安装即可
## 使用说明
命令行中使用如下命令获取帮助
```
mock-server --help
```
返回
```
Usage: mock-server [options]

命令：
  mock-server setting  desc: open setting.json
  mock-server mock     desc: open mock file
  mock-server start    desc: start mock server

选项：
  -h, --help     显示帮助信息                                             [布尔]
  -v, --version  显示版本号                                               [布尔]

示例：
  mock-server start
```

### mock-server setting
改写setting配置文件
```js
{
    "server": [ // 使用的服务数组，可以同时开启多个服务
        {
            "name": "test", // 服务名称，对应 server.json 里的服务名
            "port": 8088, // 本地服务端口号
            "mockfile": "test", // mock文件名称，如不填，则默认使用服务名称
            "proxyUrl": "https://xxx.xx.xx.xxx:443" // 代理的服务器地址
        }
    ]
}
```
可以同时开启多个服务，以便应用于同时mock多个项目的场景
### mock-server mock
打开mock目录，目录下的文件名对应setting中的`mockfile`
```
-mock
 -test.jsx
```
在下文会介绍mockfile文件的详细语法

### mock-server start
启用mock服务

## mockfile文件，使用jsx语法
即我们示例中的`test.jsx`文件
```jsx
// 需要先引入一下react
const React = require('react');

// 导出mock数据
module.exports = <mock>
    <post>
        <prefix name='trade'>
            <replace>{ data }</replace>
            <path name='queryTrade'>
                <target keys={ ['data', 'list', 0] }>
                    <merge>{ data }</merge>
                </target>
            </path>
        </prefix>
    </post>
    <get></get>
</mock>
```
- mock标签，声明启动mock数据
- post标签，声明这下面的都是 post 请求，与之对应的还有get标签
- prefix标签，表示一个请求的前缀
    - name 属性，表示前缀的值
- path标签，表示第 n 级接口地址到这里为止
    - 小提示：可以将path和prefix的值叠加使用，像这样： <prefix name='trade/queryTrade'></prefix>或者<path name='trade/queryTrade'></path>
- replace标签，表示整个替换当前接口的返回值
- merge标签，表示和当前接口的返回值进行覆盖合并，就像`Object.assign(接口实际返回值, mock值)`
- target标签，表示会依次选择keys中的字段名，选择对对应的值进行replace或merge操作
    - 例如接口返回数据为
    ```js
      {
          data: {
              list: [
                  {
                      test: test
                      // ...
                  }
              ]
          }
      }
    ```
    如果我只想replace返回数据中的data.list[0]，其它值保持不变，就可以指定keys为['data', 'list', 0]

- 更多标签还在考虑中...

示例中的xml会被解析为：
```js
[
    {
        method: 'POST',
        url: '/trade',
        type: 'replace',
        data: data
    },
    {
        method: 'POST',
        url: '/trade/queryTrade',
        target: true,
        targetKeys: ['data', 'list', 0],
        type: 'merge',
        data: data
    },
]
```

## 一些不对的写法
对于一些不严重的错误写法，会做兼容处理
```xml
<post test='test'>
    <prefix name='print'>
        <!-- 同一层级有多个 data 存在时，仅第一个生效 -->
        <replace>{ data1 }</replace>
        <!-- 这个会被忽略 -->
        <replace>{ data2 }</replace>
        <!-- 当标签内没有有效的数据项时，这个标签会被忽略 -->
        <prefix name='center1'></prefix>
    </prefix>
</post>
```

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