js的30天(数据mock)

软件生存周期

问题定义

可行性分析(技术可行性,经济可行性,社会可行性,法律法规可行性)

需求分析 (原型图--产品经理)

概要设计(UML图 (ER图 时序图

系统架构图))

详情设计 (数据库设计 技术选型(项目讨论会(需求文档)))

编码 (开发

前端 后端)

测试 (前后联调--->测试人员测试(禅道))

运行维护(运维---云端运维(私有云服务器和公有云服务器))

在开发阶段前端和后端的编码时期可能不一样,当你的后端接口不存在的时候,你又需要进行开发

那么就需要mock(模拟)数据了。

对应的一个项目进行开发可能有多个项目组,(项目组的构成 前端2个 后端5个

一个app开发 一

个测试 一个ui)。项目组的统筹叫项目组长,上面的项目的统筹项目经理(三到五个项目组)

mock数据

mock数据其实就是模拟对应的数据接口(在后端接口没出来之前能独立开发)(当前后端接口出来以

后进行前后端联调(swagger生成接口文档))

mock数据的方式

使用mock.js来进行数据mock(自己书写)

http://mockjs.com/

使用第三方mock平台(fastmock apipost apimock...)

第三方mock平台其实内核也是mock.js

使用node的json-server来进行数据mock

后端配合mock (不存在)

第三方数据mock

fastmock

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: "@address"

});

//登录失败返回的数据为空

} 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/lo

gin',{

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'))

});

node的json-server

什么是node

node是一个用于服务端的js库,也就是说你使用在服务端(类似于后台语言 (python))

使用过程

1.需要安装node环境

下载node(node版本问题 稳定版14 16有一定问题)

测试安装

node -v #用于来执行js文件

npm -v #用于管理所有的第三方库(包管理器)

如果对应的下载是解压版需要配置对应的环境变量(path路径下)

2.借助node安装对应的json-server包

npm i json-server -G #安装对应的json-server 全局安装

3.使用json-server命令启动相关服务(依赖json文件来启动服务)

以vscode来启动对应的服务 对应的vscode需要以管理员身份运行

需要执行一个指令(不然json-server无法使用)

set-ExecutionPolicy RemoteSigned

启动json-server

准备json文件

{

"users":[

{

"id":"1",

"username":"jack",

"age":"18"},

{

"id":"2",

"username":"tom",

"age":"20"

}

]

}

打开终端

json-server -w 文件名 -p 端口号 -h 主机名 #默认主机名为localhost 默认端口号为3000

json-server会给你提高一系列的接口(resultFul风格)

对应的接口说明

get请求

localhost:3000/users/1 #访问id为1的对象

//?为条件查询

localhost:3000/users?id=1 #访问条件为id=1的内容(数组)

localhost:3000/users?age=18 #访问条件为age=18的内容(数组)

//分页查询

http://localhost:3000/users?_limit=1?_page=1 #查询第一个页显示俩个的数据

post请求

localhost:3000/users #添加一个用户 返回对应添加的用户

delete请求

localhost:3000/users/1 #删除id为1的用户 返回的是一个{}

put及patch请求

localhost:3000/users/1 #修改id为1的用户 返回的是你修改完的对象

扩展内容


数组扁平化及实现方式

概述:数组扁平化是将一个多维数组(数组里面嵌套数组)变成一个一维数组(数组里面没有数组)。

实现方式

使用es6新增的数组扁平化方法 flat

var arr = [[1],[2],[3,[2]]]

console.log(arr.flat(Infinity))

使用扩展运算符

递归实现

var arr = [[1],[2],[3,[2]]]

function fn(arr){

while(arr.some(v=>Array.isArray(v))){

arr = [].concat(...arr)

}

return arr

}

fn(arr)

递归实现

var arr = [[1],[2],[3,[2]]]

function flatFn(arr) {

let value = arr.reduce((prev, current) => {

//判断当前内容是否是数组

//如果是数组递归

if (Array.isArray(current)) {

return prev.concat(flatFn(current))

} else {

//如果不是数组加进去

prev.push(current)

return prev

}

}, [])

return value

}

flatFn(arr)

使用字符串匹配

var arr = [[1],[2],[3,[2]]]

let str = arr.toString()

console.log(str.split(','))

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容