https://github.com/easy-mock/easy-mock
easy-mock
一个在线模拟后台的数据平台,通过官网注册账户之后,你就可以生成一个在线的API接口,然后通过ajax或者axios就可以访问这个接口了。
以登录为例,当我们将username=admin&password=admin这样的数据格式通过post发送给服务器,服务器会做基本的逻辑判断,如果账号密码正确,则返回一种数据,反之亦然。
那么在easy-mock怎么体现?
{
code: function({
_req
}) {
if (_req.body.username === ‘admin’ && _req.body.password === ‘admin’) {
return 20000
} else {
return 50000
}
},
data: function({
_req
}) {
if (_req.body.username === ‘admin’ && _req.body.password === ‘admin’) {
return {
token: “admin”
}
} else {
return “登录账号不对” + _req.body.username
}
}
}
easy-mock中通过function可以做基本的逻辑判断,通过_req能够获取到前端传递过来的参数(文档),需要注意地是该参数类型是application/x-www-form-urlencode类型。
这也意味着,当你在easy-mock测试数据的时候,你需要更改http头部中的Content-Type信息。
get
get的设置和post类似,不同点在于esay-mock对请求参数的获取,具体设置代码如下:
{
code: function({
_req
}) {
if (_req.query.token === ‘admin’) {
return 20000
} else {
50000
}
},
data: function({
_req
}) {
if (_req.query.token === ‘admin’) {
return {
roles: [
“admin”
],
name: “admin”,
avatar: “https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif”
}
} else {
return “登录失败”
}
}
}
https://easy-mock.com/login
easy-mock本地部署的官方介绍,https://github.com/easy-mock/easy-mock/blob/dev/README.zh-CN.md。官方介绍的简洁明了,大致分为下面几步:
安装 node(>=v8.9) & MongoDB(>=v3.4) & Redis(>=v4.0)
安装 easy-mock,更改配置文件
启动 easy-mock,测试项目是否可以正常启动,能的话就可以先 Ctrl + C了
启动 MongoDB 和 Redis
npm run build,然后用 PM2 启动 app.js
深入浅出 - Mock语法回顾
@ip -> 随机输出一个ip;
@id -> 随机输出长度18的字符,不接受参数;
“array|1-10” -> 随机输出1-10长度的数组,也可以直接是固定长度;
“object|2” -> 输出一个两个key值的对象,
“@image()” 返回一个占位图url,支持size, background, foreground, format, text;
等等,这里就不再一一介绍。
深入浅出 - Mock语法回顾,公众号:honeyBadger8
深入浅出 - 创建一个接口
它的写法,跟Mock.js一模一样,上面代码已经展示过,更多示例
使用Easy Mock创建一个接口,请看下图:
深入浅出 - 创建一个接口,公Z好:honeyBadger8
深入浅出 - 高阶用法 Function
在线编辑,它也能支持 function ,
是不是很优秀,能获取到全部请求头,可以让我们像写在js里一样写逻辑,写运算,
当然它肯定是还有很多局限性的,如并不支持ES6,
有一点需要注意的是 function 里要写传出Mock对象,不能直接@…,
来看示例:
对象 描述
Mock Mock 对象
_req.url 获得请求 url 地址
_req.method 获取请求方法
_req.params 获取 url 参数对象
_req.querystring 获取查询参数字符串(url中?后面的部分),不包含 ?
_req.query 将查询参数字符串进行解析并以对象的形式返回,如果没有查询参数字字符串则返回一个空对象
_req.body 当 post 请求以 x-www-form-urlencoded 方式提交时,我们可以拿到请求的参数对象
… _req.cookies、ip、host等等,我只是一个代码的搬运,更详细请看这里
//简单模拟登录,根据用户传入的参数,返回不同逻辑数据
{
defaultName:function({_req}){
return _req.query.name;
},
code: function({_req}){
return this.defaultName ? 0 : -97;
},
message: function({_req}) {
return this.defaultName ? “登录成功” : “参数错误”;
},
data: function({_req,Mock}){
return this.defaultName ? {
token: Mock.mock(“@guid()”),
userId: Mock.mock(“@id(5)”),
cname: Mock.mock(“@cname()”),
name: Mock.mock(“@name()”),
avatar: Mock.mock(“@image(200x100, #FF6600)”),
other:”@IT·平头哥联盟-首席填坑官∙苏南 带你再谈Mock数据之easy-mock”
}:{}
}
}
特性
支持接口代理
支持快捷键操作
支持协同编辑
支持团队项目
支持 RESTful
支持 Swagger | OpenAPI Specification (1.2 & 2.0 & 3.0)
基于 Swagger 快速创建项目
支持显示接口入参与返回值
支持显示实体类
支持灵活性与扩展性更高的响应式数据开发
支持自定义响应配置(例:status/headers/cookies)
支持 Mock.js 语法
支持 restc 方式的接口预览
链接
在线使用文档
Easy Mock CLI - 基于 Easy Mock 快速生成 api.js 的命令行工具。
$ git clone https://github.com/easy-mock/easy-mock.git
$ cd easy-mock && npm install
找到 config/default.json,或者创建一个 config/local.json 文件,将如下需要替换的字段换成自己的配置即可。
不同环境会加载不同的配置文件,在此之前你应该对 node-config 有所了解。
{
“port”: 7300,
“host”: “0.0.0.0”,
“pageSize”: 30,
“proxy”: false,
“db”: “mongodb://localhost/easy-mock”,
“unsplashClientId”: “”,
“redis”: {
“keyPrefix”: “[Easy Mock]”,
“port”: 6379,
“host”: “localhost”,
“password”: “”,
“db”: 0
},
“blackList”: {
“projects”: [], // projectId,例:”5a4495e16ef711102113e500”
“ips”: [] // ip,例:”127.0.0.1”
},
“rateLimit”: { // https://github.com/koajs/ratelimit
“max”: 1000,
“duration”: 1000
},
“jwt”: {
“expire”: “14 days”,
“secret”: “shared-secret”
},
“upload”: {
“types”: [“.jpg”, “.jpeg”, “.png”, “.gif”, “.json”, “.yml”, “.yaml”],
“size”: 5242880,
“dir”: “../public/upload”,
“expire”: {
“types”: [“.json”, “.yml”, “.yaml”],
“day”: -1
}
},
“ldap”: {
“server”: “”, // 设置 server 代表启用 LDAP 登录。例:”ldap://localhost:389” 或 “ldaps://localhost:389”(使用 SSL)
“bindDN”: “”, // 用户名,例:”cn=admin,dc=example,dc=com”
“password”: “”,
“filter”: {
“base”: “”, // 查询用户的路径,例:”dc=example,dc=com”
“attributeName”: “” // 查询字段,例:”mail”
}
},
“fe”: {
“copyright”: “”,
“storageNamespace”: “easy-mock_”,
“timeout”: 25000,
“publicPath”: “/dist/”
}
}
Mock.js的语法,
‘name|min-max’: string
通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max。
‘name|count’: string
通过重复 string 生成一个字符串,重复次数等于 count。
‘name|+1’: number
属性值自动加 1,初始值为 number。
‘name|min-max’: number
生成一个大于等于 min、小于等于 max 的整数,属性值 number 只是用来确定类型。
‘name|min-max.dmin-dmax’: number
生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dmin 到 dmax位。
Mock.mock({
‘number1 | 1-100.1-10’: 1, |
‘number2 | 123.1-10’: 1, |
‘number3 | 123.3’: 1, |
‘number4 | 123.10’: 1.123 |
})
. 属性值是布尔型 Boolean
‘name|1’: boolean
随机生成一个布尔值,值为 true 的概率是 1/2,值为false 的概率同样是 1/2。
‘name|min-max’: value
随机生成一个布尔值,值为 value 的概率是 min/ (min + max),值为 !value 的概率是 max / (min + max)。
‘name|count’: object
从属性值 object 中随机选取 count 个属性。
‘name|min-max’: object
从属性值 object 中随机选取 min 到 max 个属性。
‘name|1’: array
从属性值 array 中随机选取 1 个元素,作为最终值。
‘name|+1’: array
从属性值 array 中顺序选取 1 个元素,作为最终值。
‘name|min-max’: array
通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max。
‘name|count’: array
通过重复属性值 array 生成一个新数组,重复次数为 count。
‘name’: function
执行函数 function,取其返回值作为最终的属性值,函数的上下文为属性 ’name’ 所在的对象。
‘name’: regexp
根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串。
Mock.mock({
’regexp1’: /[a-z][A-Z][0-9]/,
’regexp2’: /\w\W\s\S\d\D/,
’regexp3’: /\d{5,10}/
})
在开始之前,假设你已经成功安装了 Node.js(>= v8.9)& MongoDB(>= v3.4)& Redis(>= v4.0)。
MongoDB安装教程:http://www.runoob.com/mongodb…
Redis安装教程:http://www.runoob.com/redis/r…
tips小提示
node.js和mongodb安装的时候一般一直next下去就可以了。
redis下载下来是压缩包,解压就行了