这是我参与更文挑战的第3天,活动详情查看: 更文挑战前端
如今开发模式通常都是先后端分离,那就免不了互相“迁就”,好比说后台只把接口文档大致定好了,接口还没出,做为前端的不能傻等着啊,可是不联调的去开发,不少细节就照顾不到,很容易就出现临近快交工的时候才出接口(这里不能狭隘的认为后台故意地,就是菜而已),当联调的时候才发现不少问题,那就太尴尬了,若是延误了,锅很容易就盖在了前端的头上,得想个辙:react
首先安装mockjs
ios
yarn add -D mockjs
复制代码
而后看一下本身的网络请求库用的是啥:git
axios:github
...
import Mock from 'mockjs'
...
Mock.mock(apiUrl, mock)
...
复制代码
fetch:就得特殊处理一下web
首先安装mockjs-fetch
shell
yarn add -D mockjs-fetch
复制代码
而后axios
...
import Mock from 'mockjs'
import mockFetch from 'mockjs-fetch';
mockFetch(Mock);
...
Mock.mock(apiUrl, mock)
复制代码
到此基本操做就搞定了,但这还不够。后端
我看过不少的项目,每每是写了一堆。。。。栗🌰:api
import Mock from 'mockjs'
import { builder, getBody } from '../util'
const login = options => {
const body = getBody(options)
return builder(
{
id: Mock.mock('@guid'), //这个@是mockJs的占位符,能够到官网了解一下,这个不重要,咱们主要codeReview
name: Mock.mock('@name'),
username: 'admin',
password: '',
avatar:
'https://gw.alipayobjects.com/zos/rmsportal/jZUIxmJycoymBprLOUbT.png',
status: 1,
telephone: '',
lastLoginIp: '27.154.74.117',
lastLoginTime: 1534837621348,
creatorId: 'admin',
createTime: 1497160610259,
deleted: 0,
roleId: 'admin',
lang: 'zh-CN',
token: '4291d7da9005377ec9aec4a71ea837f'
},
'',
200
)
}
Mock.mock(/\/auth\/login/, 'post', login)
复制代码
首先我们品评一下,不知道是否是个人“审美”怪,我看这样的代码多少有点别扭。
mockjs
import { builder, getBody } from '../util'
复制代码
Mock.mock(/\/auth\/login/, 'post', login)
而后执行了mock评价:
mockjs
库,重复了虽然就一条,但还算能忍。总结:
重复(哪怕只有几条),关注的点多(哪怕只有几个),硬编码(哪怕只有一处),有能力重构就不能忍,咱们只是想mock数据,直接点,天然一点很差么,就像字面那样,我想“mock”一个“api”。
import BaseApi from './baseApi'
let config = {
fetchLightAdd: "/light/fetchLightAdd",
fetchLightUpdate: "/light/fetchLightUpdate",
fetchLightDetail: "/light/fetchLightDetail",
fetchTestDataList: "/light/fetchTestDataList",
}
export default new BaseApi({ config })
复制代码
import BaseMock from './baseMock'
let config = {
fetchLightAdd: {
...
},
fetchLightUpdate: {
...
},
fetchLightDetail: (data) => {
const { body = {} } = data;
let params = JSON.parse(body);
//在这里就各类模拟入参状况发挥不一样结果。
if (params.id === "0") {
return {
code: "200",
data: [{
lightName: "test_lightName_0",
comment: "test_comment_0",
lightItems: [{ lightItemId: 1, lightType: 0, baseSelect: 1, exclude: false }]
}]
}
} else if (params.id === "1") {
return {
code: "200",
data: [{
lightName: "test_lightName_1",
comment: "test_comment_1",
lightItems: [{ lightItemId: 1, lightType: 0, baseSelect: 0, exclude: 0 }, { lightItemId: 2, lightType: 1, baseSelect: 1, exclude: false }]
}]
}
}
},
fetchTestDataList: {
...
}
}
export default function mock(api) {
new BaseMock({ config, apiConfig: api.getUrlConfig() })
}
复制代码
BaseMock
😂,(原本这句我都想省,但就担忧代码搞的很差懂了,要不我差点拔刀🐶)总结:就是一个简单的数据结构,提供给你,配就完了,想mock哪一个接口,就写这个接口名字,真是字面那样:我想“mock”一个“api”,其余不须要你关注了,就这么简单且天然。
{
/* 配置mock启动 */
const { NODE_ENV, MOCK } = process.env;
if (NODE_ENV === "development") {
if (MOCK != "none") {
require('MOCK');
}
}
}
复制代码
配置webpak的选项:
//isEnvProduction根据process.env.NODE_ENVde值判断获得的
externals:isEnvProduction?{
mockjs:mockjs
}:{}
复制代码
首先Moderate打包速度仍是很快的,才21s,嘿嘿😁
而后看下报告:
要求别人不如要求本身来的实际,mock确实能缓解很多压力,前端不容易,ta的难还不是那种~~~难,ta真的是那种,那种不多见的那种,神经病同样的难度。