百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Vue+Ant Design Vue+Mockjs----mock篇

toyiye 2024-04-06 13:45 20 浏览 0 评论

mock 介绍

mockjs官方使用文档


目的

方便生成随机数据,拦截Ajax请求。

??偶尔会写一些前端的项目,参考一些比较知名的UI框架,里面很多例子都会把数据直接写在里面,作为参考,因此很多项目里面也会这样手写数据,直接写死在前端,将代码与mock数据紧密结合在一起,每次需要修改数据,都需要直接改动到代码层,前端本身改动就非常大,如此频繁的修改代码层面显然不是很好的实践。

同时手写的数据,美观与真实性差异就看作者水平了。

优点

  1. 非常简单强大,入手快
  2. 拦截api请求,mock出真实的前后端交互情况
  3. 更改mock数据方便,与业务代码分离,频繁修改也不会有太大的危险
  4. 在后端接口准备好前,通过mock接口来模拟与后台的交互,同时调整数据结构。
  5. 开发过程中,mock数据也可以与后端提前讨论,引导后台的数据结构更加合理。
  6. 后台开发完以后,可以一次性切换接口

缺点

灵活性不够,无法mock后台一些异常处理返回

Build成静态文件以后线上无法使用(或许我没有找对方法)

comment

? ?针对第一个问题,忽然想到一种方案,或许你可以在同一个接口里面,mock不同的response,然后采用随机函数,随机的返回各种异常response,这样可以测试前端应对各种后台error作出的处理是否符合预期。

安装

cd myProject

#仅安装到本地开发环境
npm install mockjs --save-dev 

mock 实现

src
│ 
└───api //api文件夹,所有的接口都到单独抽出来,放在该目录下
│ index.js //入口函数,对外暴露
│ search.js //为每一类接口单独创建的文件,一类接口统一放在一个目录下
│
└───mock
 index.js //所有的mock api都会写在下面,如果需要,也可以拆分
————————————————

_mock/index.js_

/**
 * data mock refer to http://mockjs.com
 *
 */
const Mock = require('mockjs');
const util = require('./util');

module.exports = function (app) {

 app.get('/mock/v1/search', function (rep, res) {
 let result = {
 "data|24": [{
 "date": "@date('yyyy-MM-dd')",
 "logNum": "@natural(60, 1000)"
 }
 ]
 };
 //util.wrapResultSuccess 包装了response返回,规范统一
 res.send(util.wrapResultSuccess(Mock.mock(result).data));
 });


}

_vue.config.js_

//vue cli3 配置文件
 devServer: {
 port: port,
 open: true,
 host: '127.0.0.1',
 https: false,
 hotOnly: false,
 overlay: {
 warnings: false,
 errors: true
 },
 #根据当前环境,把整个mock目录加载到项目中,每次修改mock文件需要重启
 before: process.env.ENV == 'mock' ? require('./src/mock'):null,
 },

_api/index.js_

/**
 * api interface
 */

import search from '@/api/search'

export default {
 search
}

_api/search.js_

/**
 * article模块接口列表
 */

import axios from '@/plugins/request';
import trend from "@/plugins/handle"


const search = {

 statusPing () {
 return axios.get(`/status_ping`);
 },

 //search
 search (body) {
 return axios.get(`v1/search`, body);
 },


export default search;

utils/request.js

把axiso做了一层封装,每一次前端请求都会把x-request-id带给后台,后台打印日志的时候,都会打印这个id,方便日后追踪问题,同事针对一些后台的error,可以做一些统一的处理。

import router from '@/pages/login/router';

const xss = require("xss");

let instance = axios.create({
 timeout: 1000 * 60
 });

instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

function getRandomTraceId() {
 let characters = 'abcdefghijklmnopqrstuvwxyz1234567890';
 let result = '';
 let idLength = 32;

 try {
 for (let index = 0; index < idLength; index++) {
 result += characters[parseInt(Math.random() * characters.length, 10)];
 }
 } catch (error) {
 result = 'getRandomTraceIdError';
 }

 return result;
}
/**
 * request interceptor
 * Before each request, if token exists, carry it in the request header
 */
instance.interceptors.request.use(
 config => {
 // console.log(JSON.stringify(config));

 //add trace id for request
 config.headers['x-request-id'] = getRandomTraceId();

 //xss filter request url
 config.url = xss(config.url);


 // 登录流程控制中,根据本地是否存在token判断用户的登录情况
 // 但是即使token存在,也有可能token是过期的,所以在每次的请求头中携带token
 // 后台根据携带的token判断用户的登录情况,并返回给我们对应的状态码
 // 而后我们可以在响应拦截器中,根据状态码进行一些统一的操作。
 // const token = store.state.token;
 // token && (config.headers.Authorization = token);
 return config;
 },
 error => Promise.error(error))


instance.interceptors.response.use(

 res => res.status === 200 ? Promise.resolve(res) : Promise.reject(res),

 error => {
 const {response} = error;
 if (response) {
 errorHandle(response.status, response.data.message);
 return Promise.reject(response);
 } else {
 // 处理断网的情况
 // eg:请求超时或断网时,更新state的network状态
 // network状态在app.vue中控制着一个全局的断网提示组件的显示隐藏
 // 关于断网组件中的刷新重新获取数据,会在断网组件中说明
 if (!window.navigator.onLine) {
 // store.commit('changeNetwork', false);
 } else {
 return Promise.reject(error);
 }
 }
 });

export default instance;

_main.js_

直接把api类挂载到vue上,这样方便使用,也可以直接到使用类里面去引入

import api from '@/api'

Vue.prototype.$api = api;

window.APP=new Vue({
 router,
 i18n,
 api,
 store,
 render: h => h(App)
}).$mount('#app')

_how to use_

async getData(){
 let response = await this.$api.search.search(request);
 if (response.status == 200 && response.data.data) {
 console.log(`response.data.data = &{response.data.data}`);
 }
}

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码