数据mock(1)
软件生存周期
-
问题定义
-
可行性分析(技术可行性,经济可行性,社会可行性,法律法规可行性)
-
需求分析 (原型图--产品经理)
-
概要设计(UML图 (ER图 时序图 系统架构图))
-
详情设计 (数据库设计 技术选型(项目讨论会(需求文档)))
-
编码 (开发 前端 后端)
-
测试 (前后联调--->测试人员测试(禅道))
-
运行维护(运维---云端运维(私有云服务器和公有云服务器))
-
在开发阶段前端和后端的编码时期可能不一样,当你的后端接口不存在的时候,你又需要进行开发那么就需要mock(模拟)数据了。
-
对应的一个项目进行开发可能有多个项目组,(项目组的构成 前端2个 后端5个 一个app开发 一个测试 一个ui)。项目组的统筹叫项目组长,上面的项目的统筹项目经理(三到五个项目组)
mock数据
mock数据的方式
-
使用mock.js来进行数据mock(自己书写)
-
使用第三方mock平台(fastmock apipost apimock...)
第三方mock平台其实内核也是mock.js
-
使用node的json-server来进行数据mock
-
后端配合mock (不存在)
第三方数据mock
fastmock
基本使用
创建账号登录
创建对应的项目接口
{
code:200,
message:'ok',
data:{
'city':'@city(true)',
'name':'@cname()',
'age':'@integer(1, 99)'
}
}
相关mock.js的文档操作
"string|1-10": "=", // 随机生成1到10个等号
"string2|3": "=", // 随机生成2个或者三个等号
"number|+1": 0, // 从0开始自增
"number2|1-00.1-3": 1, // 生成一个小数,小数点前面1到10,小数点后1到3位
"boolean": "@boolean( 1, 2, true )", // 生成boolean值 三个参数,1表示第三个参数true出现的概率,2表示false出现的概率
"name": "@cname", // 随机生成中文姓名
"firstname": "@cfirst", // 随机生成中文姓
"int": "@integer(1, 10)", // 随机生成1-10的整数
"float": "@float(1,2,3,4)", // 随机生成浮点数,四个参数分别为,整数部分的最大最小值和小数部分的最大最小值
"range": "@range(1,100,10)", // 随机生成整数数组,三个参数为,最大最小值和加的步长
"natural": "@natural(60, 100)", // 随机生成自然数(大于零的数)
"email": "@email", // 邮箱
"ip": "@ip" ,// ip
"datatime": "@date('yy-MM-dd hh:mm:ss')" // 随机生成指定格式的时间
"list|10": [{
"id|+1": 1,
"name": "@cword(10)",
"title": "@cword(20)",
"descript": "@csentence(20,50)",
"price": "@float(10,100,10,100)"
}]
"list|10": [{
// 参数从左到右依次为,图片尺寸,背景色,前景色(及文字颜色),图片格式,图片中间的填充文字内容
"image": "@image('200x100', '#ffcc33', '#FFF', 'png', 'Fast Mock')"
}]
简易的接口
{
"code":'200',
'data':{
"mylist|10": [{
"id|+1": 1,
"name": "@cword(10)",
"title": "@cword(20)",
"descript": "@csentence(20,50)",
"price": "@float(10,100,10,100)",
"float": "@float(1,2,3,4)",
"range": "@range(1,100,10)",
"natural": "@natural(60, 100)",
"email": "@email",
"ip": "@ip" ,
"datatime": "@date('yy-MM-dd hh:mm:ss')",
"image": "@image('200x100', '@hex', '@hex', 'png', '@word')"
}]
},
'messgae':'OK'
}
在线mock平台的数据都是随机生成的(死数据),所以对应的你只能执行查询的操作,不能执行增删改的操作。也就说你发起的post请求,delete请求,put请求等,其实都是返回死的数据。(mock关注的是数据的格式 并不关注于数据本身)
简易的登录接口
{
"code": "0000",
"data": {
"verifySuccess": function({_req, Mock}) {//_req表示请求
let body = _req.body; //获取请求体
//写死了对应的用户名为admin 密码为123456
return body.username === 'admin' && body.password === '123456';
},
"userInfo": function({_req, Mock}) {
let body = _req.body; //获取请求体
//验证用户名和密码
if (body.username === 'admin' && body.password === '123456') {
//返回mock数据
return Mock.mock({
username: "admin",
email: "@email",
address: "@county(true)"
});
//登录失败返回的数据为空
} else {
return null;
}
},
"token": function({_req,Mock}){
let body = _req.body;
if (body.username === 'admin' && body.password === '123456') {
//返回32位的英文
return Mock.mock("@word(32)")
}
return null
}
},
"desc": "成功"
}
-
基于jwt(json web token)的所有的请求(做验证的)都要带上对应的token进行验证
-
token是你登录的时候给你返回的 后续你访问其他的相关jwt接口就需要带上这个token(加密的)
-
token的组成部分 (令牌)
标识 (随机生成的)
数据 (相关用户信息)
过期时间 (对应的失效时间)
-
在发送数据到某些jwt接口(不包括登录注册)的时候 需要携带token(放在请求头/cookie)
-
在对应的登录功能的时候 会接收对应的token存起来(登录的响应回来的时候)(localStorage)
-
请求拦截 判断当前的接口是否需要携带token 如果需要将token放入请求头进行发送
-
响应拦截 判断当前是否有token返回 将token存入到localstorage里面
简单登录功能实现
$('button').click(()=>{
//获取用户名和密码
let username = $('input:eq(0)').val()
let password = $('input:eq(1)').val()
//发送请求
$.post('https://www.fastmock.site/mock/63ed6ce74ac932e4d8ed48f176ab80d3/test/login',{
username,
password
},(res)=>{
console.log(res);
localStorage.setItem('token',res.data.token)
})
})
$(document).ajaxSend(function(event, request, settings) {
//携带token发送
request.setRequestHeader('x-token',localStorage.getItem('token'))
});