几种前端模拟数据使用方案

模拟数据的作用与必要性

1、静态页面开发需要模拟数据填充看样式
2、自测需要各种场景下的数据,如空数据、网络慢、数据的各种状态等
3、面向领导编程时可以早点有东西给领导看,需求要改早点改(码农的卑微)
4、减少前端端联调时间,只要接口文档是对的,联调看几眼就完事,出了bug也是后端的
5、bug修改、需求变更时,可以不用连接后端转圈圈(接口慢的时候loading很烦人)
6、以后想到了再补

几种模拟数据使用方案

  1. 简单粗暴的写在代码中
  2. 使用promise封装接口自定义返回
  3. 本地启动后端服务
  4. 使用mockjs
  5. 使用nodejs模拟一个服务器
  6. 使用YApi、ApiPost、postman等API调试及接口文档工具

直接写在业务代码中

优点:
1、使用简单。

缺点:
1、不删掉代码太臃肿,删掉了需要的时候又得重写
2、 不是异步的,实际在用异步数据时可能代码会出现时序bug

推荐的使用场景:
1、项目非常简单

使用指南:有手就行

// 用脚的写法
let data = null;
// 用的时候打开
// data = [
// 	{ label: 1, name:1}
// ]
// 用的时候注释掉下面,不用的时候注释掉上面
await axios.get({
	url: `/getData`,
}).then(rsp => {
	data = rsp.data;
}).catch(rsp=>{
	reject(rsp);
});
this.originData = data;

// 用手写
let data = null;
if(process.env.NODE_ENV == 'development'){
	data = [
		{ label: 1, name:1}
	];
} else {
	await axios.get({
		url: `/getData`,
	}).then(rsp => {
		data = rsp.data;
	}).catch(rsp=>{
		reject(rsp);
	});
}
this.originData = data;

// 数据太多了,放到同级目录下的mock.json里
let data = null;
if(process.env.NODE_ENV == 'development'){
	data = await axios.get({
		url: `./mock.json`,
	});
} else {
	await axios.get({
		url: `/getData`,
	}).then(rsp => {
		data = rsp.data;
	}).catch(rsp=>{
		reject(rsp);
	});
}
this.originData = data;

使用promise封装接口调用自定义返回

优点:
1、使用简单
2、相对于第一种把模拟数据从业务代码中摘了出来,代码清爽一点

缺点:
1.、跟直接写在业务代码里一样

推荐的使用场景:
1、项目非常简单

使用指南: api调用写在一个同级目录下的api.js文件中

// api.js代码示例
export default {
    // 获取数据
    getData(option) {
        return new Promise(resolve => {
        	if(process.env.NODE_ENV == 'development'){
        		resolve({
        			"code": 0,
			        "data":[]
				});
			   return;
			}
            axios.get({
                url: `/getData`,
                ...option
            }).then(rsp => {
                resolve(rsp);
            }).catch(rsp=>{
				reject(rsp);
			});
        });
    },
}
// 业务代码中使用
import Api from './api';
...
let options = { data: {} };
let data = await Api.getData(options);
console.log(data);

本地启动后端服务

优点:
1、 真实的接口调用,调试完连联调的步骤都省下了。

缺点:
1.、需要懂后端,本机有一整套后端的开发软件
2.、电脑配置不够会比较卡,因为后端的IDE都比较重
3.、需要后端先开发完接口

推荐的使用场景:
1、个人项目
2、小公司,前后端都是同一个人

使用指南:学会后端,作者也在不断学习中

使用mockjs

优点:
1、使用简单

缺点:
1、 不是异步的,需要手动加异步
2、不支持文件操作,所有的接口都会被拦截,异步加载文件会被改变格式(如mapbox的图片加载),导致文件解析失败

推荐的使用场景:
1、没有很多异步文件加载的项目都可以用

使用指南

1、安装

npm install mockjs

2、在入口文件(如vue的main.js)引入

// 开发环境才启用,当然也可以不这么写,先部署到测试环境给产品经理跟UI看看效果
if(process.env.NODE_ENV == 'development'){
    require('/mock/index.js');  // 自定义js文件地址
}

3、使用 (在mock/index.js中)

// 引入
import Mock from 'mockjs';
// 假设有多个代理前缀
const baseUrl= {
    server1: '/system',
    server2: '/user',
}
// 接口拦截默认是全字符串匹配,RegExp ".*",是为了避免接口后带了query
Mock.mock(RegExp(server.server1+ '/login' + ".*"), function (options) {
	/*
		options的参数:
		type 请求类型,
		url 包括了query, 
		body post请求的body
	*/
	const { body, url } = options;
    return {
        "code": 0,
        "data":{
			"userName": body.userName
		}
    }
})
Mock.mock(RegExp(server.server2+ '/getSomething' + ".*"), function (options) {
	const { body, url } = options
	let data = [];
	for(let i = 0; i < 10; i++){
		data.push({
			"label": "哈哈" + i,
			"value": parseInt( Math.random() * 100 )
		})
	}
    return {
        "code": 0,
        "data": data
    }
})
export default Mock;

这里只介绍了mockjs的接口拦截使用,mockjs还能生成模拟数据(一般Math.random够用了),更高阶的使用请前往官网地址

使用nodejs模拟一个服务器

优点:
1、真实的接口调用
2、可以部署到服务器做演示用
3、支持上传下载等文件操作

缺点:
1、需要多启动一个node服务
2、需要学习node
3、作为前端应该要学会nodejs,所以以上都不算缺点

推荐的使用场景:
1、相对复杂的项目
2、公司有基础脚手架的,引入后就用它

安装nodejs(Linux上node离线包安装)

1、去官网挑一个合适的nodejs版本。什么叫合适的?就是看看你的linux处理器是arm架构还是x86架构
linux命令:

 lscpu

在这里插入图片描述

在这里插入图片描述
2、上传到linux解压(假如放到了home)

 tar -zxvf node-xxx.tar.xz -C /home/nodejs 

3、设置全局node指令

ln -s /home/nodejs/bin/npm /usr/local/bin/ 
ln -s /home/nodejs/bin/node /usr/local/bin/

4、最后node -v , npm -v 看一眼,如果不成功,要么node版本错了,要么路径错了。删掉软链重来一遍上面的操作

// 删除软链指令:
rm -rf /usr/local/bin/node
rm -rf /usr/local/bin/npm

5、使用node做服务器最好装一个pm2,pm2是一个node进程管理工具,安装如下

// 最好跟node安装包放一块 cd /home/nodejs后执行
npm install pm2
// 加个软链把pm2设置为全局命令
ln -s /home/nodejs/node_modules/pm2/bin/node /usr/local/bin/
// 在windows上面直接 npm install pm2 -g ,不过感觉window上没必要用pm2,开发环境用nodemon带热更新方便点

安装 express、nodemon

// express是node服务器框架,使用简单
npm install express
// nodemon是一个可以监听文件变化热更新服务器的插件,
npm install nodemon -g
// 在package.json同目录下创建一个nodemon.json文件,下面是官网的默认配置
{
    "restartable": "rs",
    "ignore": [
        ".git",
        ".svn",
        "node_modules/**/node_modules"
    ],
    "verbose": true,
    "execMap": {
        "js": "node --harmony"
    },
    // 这里写要监听的文件路径
    "watch": [
        "./mock-server/index.js",
        "./mock-server/monitor.js",
        "./mock-server/warn.js"
    ],
    "env": {
        "NODE_ENV": "development"
    },
    "ext": "js json"
}

使用express开发mock服务

在vue项目根目录下新建一个mock文件夹、server.js文件,mock中新建router1.js、router2.js、router3.js
注:项目复杂需要设计一个合理的目录结构
1、server.js文件

const express = require('express');
const server = express();
// 引入并使用路由,使用router可以根据后端服务
// 注意: 代码里面的路径跟你在哪启动命令有关,原理是:在哪里启动服务,那里就是根目录
// 相对路径指的是相对于根目录的路径。详细情况到nodejs官网看
const router1= require('./mock/router1');
// 路由前缀
server.use('/router1', indexRouter);
const router2= require('./mock/router2');
server.use('/router2', warnRouter);
// 前缀也可以是一样的,为了区分模块把接口写在不同文件中更合适
const router3= require('./mock/router3');
server.use('/router2', router3);
// 监听端口号为8888
server.listen(8888);

2、router文件

const express = require('express');
const router = express.Router();
const pre = "/api";
const fs = require('fs');
// 简单使用
router.post(pre + '/getData', function (req, res) {
    res.json({data:{a:1}});
})
// 根据参数返回
router.post(pre + '/getDataByPage', function (req, res) {
    let params = req.body;
    let records = [];
    let citys = ["西安市", "成都市", "重庆市", "新疆维吾尔自治区", "东莞市"];
    for (let i = 0; i < pageSize; i++) {
        let timeNum = parseInt(Math.random() * 9);
        records.push({
            "citys": citys[parseInt(Math.random() * 6)],
            "level": parseInt(Math.random() * 3 + 1),
            "sendMsgTime": replaceStr(params.startTime, 12, timeNum + 1)
        })
    }
    res.json({
        "code": "200",
        "data": {
            "page": params.page,
            "records": records,
            "pageSize": params.pageSize,
            "total": 36
        },
        "msg": "success"
    })
})
// 读取json文件的方式
router.get(pre + '/getDataFromJson', function (req, res) {
    let srcObj = fs.readFileSync('./mock/some.json', {encoding:'utf-8'});
    res.json( JSON.parse(srcObj) );
})

module.exports = router

3、启动node服务

// node 启动
node server.js
// nodemon启动
nodemon server.js
// pm2启动
pm2 start server.js

4、vue.config.js中配置代理(以vue-cli3为例)

module.exports = {
	// 省略其它配置
	devServer: {
        proxy: {
            '/api': {
                target: 'localhost:8888',
                // 重写前缀为空
                // pathRewrite: path => {
                //     return path.replace('/api', '');
                // },
                // websocket开上,但是使用时容易把vue的开发服务器击穿
                ws: true,
                // 跨域开上
                changeOrigin: true
            },
        },
        open: true
    }
}

使用YApi、ApiPost、postman等API调试及接口文档工具

优点:
1、一般由后端编写,如果写得好,那前端就不需要再自己做模拟数据了。
2、可以当接口文档用。

缺点:
1、需要一个靠谱的后端团队
2、需要一些学习成本

使用指南:工具使用没什么好说的,上官网看看就知道。

总结

1、如果后端团队靠谱(后端是自己最靠谱),那就由后端选一个工具。
2、如果项目简单,那就用mockjs
3、如果要最好的效果,那就用nodejs写一个服务
4、如果要偷懒,写在代码promise里
5、不要直接写在业务代码里面,非要写就别删掉,注释掉或者按环境编译,代码丑点就丑点

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值