Ajax
请求,返回模拟的响应数据可以通过直接在HTML页面中引用 Mock.js 的CDN链接来使用它,而不必使用npm来下载和安装。
1 |
|
1 | # 安装 |
1 | // 配置 Mock 路径 |
Mock.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
的语法规范包括两部分
- 数据模板定义规范
- 数据占位符定义规范
#### 数据模板定义规范
- 数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值
```javascript
// 属性名 name
// 生成规则 rule
// 属性值 value
'name|rule': value
属性名 和 生成规则 之间用竖线 |
分隔
生成规则 是可选的
生成规则 有 7 种格式
'name|min-max': value
'name|count': value
'name|min-max.dmin-dmax': value
'name|min-max.dcount': value
'name|count.dmin-dmax': value
'name|count.dcount': value
'name|+step': value
生成规则 的 含义 需要依赖 属性值的类型 才能确定
属性值 中可以含有 @
占位符
属性值 还指定了最终值的初始值和类型
属性值是字符串 String
'name|min-max': string
1
2
3
4
5
- 通过重复 `string`生成一个字符串,重复次数大于等于`min`,小于等于 `max`
- ```
'name|count': string
- 通过重复 `string`生成一个字符串,重复次数等于 `count`。
属性值是数字Number
'name|+1': number
1
2
3
4
5
- 属性值自动加 `1`,初始值为 `number`
- ```
'name|min-max': number
- 生成一个大于等于 `min`、小于等于 `max`的整数,属性值 `number` 只是用来确定类型
'name|min-max.dmin-dmax': number
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- 生成一个浮点数,整数部分大于等于`min`、小于等于 `max`,小数部分保留 `dmin` 到 `dmax` 位
```javascript
Mock.mock({
'number1|1-100.1-10': 1,
'number2|123.1-10': 1,
'number3|123.3': 1,
'number4|123.10': 1.123
})
// =>
{
"number1": 12.92,
"number2": 123.51,
"number3": 123.777,
"number4": 123.1231091814
}
属性值是布尔型 Boolean
'name|1': boolean
1
2
3
4
5
- 随机生成一个布尔值,值为 `true` 的概率是 `1/2`,值为 `false` 的概率同样是 `1/2`
- ```
'name|min-max': value
- 随机生成一个布尔值,值为 `value` 的概率是`min / (min + max)`,值为 `!value`的概率是 `max / (min + max)`\
属性值是对象 Object
'name|count': object
1
2
3
4
5
- 从属性值 `object`中随机选取 `count`个属性
- ```
'name|min-max': object
- 从属性值 `object`中随机选取 `min` 到 `max` 个属性
属性值是数组 Array
'name|1': array
1
2
3
4
5
- 从属性值 `array` 中随机选取 `1`个元素,作为最终值
- ```
'name|+1': array
- 从属性值 `array`中顺序选取 `1` 个元素,作为最终值
'name|min-max': array
1
2
3
4
5
- 通过重复属性值`array` 生成一个新数组,重复次数大于等于 `min`,小于等于 `max`
- ```
'name|count': array
- 通过重复属性值 `array`生成一个新数组,重复次数为 `count`
属性值是函数 Function
'name': function
1
2
3
4
5
6
7
- 执行函数 `function`,取其返回值作为最终的属性值,函数的上下文为属性 `'name'` 所在的对象
- 属性值是正则表达式 `RegExp`
- ```
'name': regexp
- 根据正则表达式 `regexp` 反向生成可以匹配它的字符串。用于生成自定义格式的字符串
1 | Mock.mock({ |
占位符,只是在属性值字符串中占个位置,并不出现在最终的属性值中
1 | @占位符 |
@
来标识其后的字符串是 占位符Mock.Random
中的方法Mock.Random.extend()
来扩展自定义占位符1 | Mock.mock({ |
1 | <!-- (必选)加载 Mock --> |
rurl
的 Ajax
请求时,将根据数据模板 template
生成模拟数据,并作为响应数据返回1 | <!-- (必选)加载 Mock --> |
rurl
的 Ajax
请求时,函数 function(options)
将被执行,并把执行结果作为响应数据返回1 | // Mock.mock(rurl, function(options)) |
Mock.setup( settings )
1
2
3
4
5
6
7
8
9
10
11
12
- 配置拦截 `Ajax` 请求时的行为。支持的配置项有:`timeout`
> 指定被拦截的 `Ajax` 请求的响应时间,单位是毫秒。值可以是正整数,例如 `400`,表示 `400` 毫秒 后才会返回响应内容;也可以是横杠 `'-'` 风格的字符串,例如 `'200-600'`,表示响应时间介于 `200` 和 `600` 毫秒之间。默认值是`'10-100'`
```javascript
Mock.setup({
timeout: 400
})
Mock.setup({
timeout: '200-600'
})
目前,接口 Mock.setup( settings )
仅用于配置 Ajax
请求
Mock.Random
是一个工具类,用于生成各种随机数据Mock.Random
的方法在数据模板中称为『占位符』,书写格式为 @
占位符(参数 [, 参数])1 | var Random = Mock.Random |
为了更好的分工合作,让前端能在不依赖后端环境的情况下进行开发,其中一种手段就是为前端开发者提供一个 web 容器,这个本地环境就是 mock-server
一个比较好的 mock-server 该有的能力
mock
接口时不需要重启 mock
服务,更不用重启前端构建服务Webpack
mock
数据可以由工具生成不需要自己手动写POST
、GET
请求搭建主要思路
以
json-server
作为mock
服务器,mock.js
生成mock
数据,利用gulp + nodemon + browser-sync
监听mock
文件的改动重启node
服务,刷新浏览器,以此达到一种相对完美的mock-server
要求
Webpack
的前端工程为例1 | cnpm install json-server mockjs --save |
mock
文件夹,新建 mock/db.js
作为 mock
数据源,mock/server.js
作为 mock
服务,mock/routes.js
重写路由表1 | var Mock = require('mockjs'); |
mock.js
生成 mock
数据,可以尽可能的还原真实数据,还可以减少数据构造的复杂度1 | // routes.js |
1 | $ node mock/server.js |
http://localhost:3000/comment/get.action
即可查看到我们想要的数据是不是这样就算搭建完了我们的
mock-server
?不,并没有。我们可以尝试修改一下db.js
的文件内容,刷新浏览器发现mock
数据并没有像我们想象的那样修改。那也就是说每次当我们需要添加 /修改mock
数据使都需要重启一次mock
服务
通过
Webpack
配置proxy
代理
1 | module.exports = { |
ajax
请求就可以写成,这里以 axios
为例子1 | function getComments () { |
我们希望更改
mock
文件能和webpack
热更新一样,所改即所得。这里我使用了nodemon
,利用gulp
建立自动执行的任务。
1 | cnpm install gulp gulp-nodemon browser-sync --save |
Webpack
工程时只需要先执行 npm run dev
terminal
执行 gulp mock
mock-server
环境