首页 > 其他分享 >mock在项目中的使用

mock在项目中的使用

时间:2023-06-15 14:35:04浏览次数:40  
标签:name 项目 sys mock 使用 data Mock icon

mock在项目中的使用

1.下载

npm i mockjs axios -D;

2.代码配置

2.1 mock文件夹index.js文件

// 配置 mock 文件
// 首先引入Mock
const Mock = require('mockjs');

// 设置拦截ajax请求的相应时间
Mock.setup({
    timeout: '200-600'
});

let configArray = [];

// 使用webpack的require.context()遍历所有mock文件
const files = require.context('.', true, /\.js$/);
files.keys().forEach((key) => {
    if (key === './index.js') return;
    configArray = configArray.concat(files(key).default);
});

// 注册所有的mock服务
configArray.forEach((item) => {
    for (let [path, target] of Object.entries(item)) {
        let protocol = path.split('|');
        Mock.mock(new RegExp('^' + protocol[1]), protocol[0], target);
    }
});

2.2 在app.js或main.js主文件中引入mock文件

import "../mock";

2.3 mock文件夹下创建mock1.js

const Mock = require('mockjs');
var Random = Mock.Random
let data=Mock.mock({
    'rows|8': [{ //模拟每页有多少条数据。 每页8条。
        key: '@guid', //每页数据都是有id的。 随机生成数据. @是占位符,随机生成后不会重复。
        name: '@cname',  //前缀加 c 的意思为随机生成中文,否则是英文
        'age|1-70': 56,  
        address: '@csentence',
        'tags|1-2': ['@name'] 
    }]
})
let data2=Mock.mock({
    'rows|4': [{ //模拟每页有多少条数据。 每页8条。
        key: '@guid', //每页数据都是有id的。 随机生成数据. @是占位符,随机生成后不会重复。
        name: '@cname',  //前缀加 c 的意思为随机生成中文,否则是英文
        'age|1-70': 56,  
        address: Random.csentence(),
        'tags|1-2': ['@name'] 
    }]
})
let articleList = {
    code: 200,
    msg: 'success',
    data: { //数据
        total: 100, //模拟数据的页数,分页功能。 100条
        rows:data.rows
    }
};
let List = {
    code: 200,
    msg: 'ss',
    data: { //数据
        total: 10, //模拟数据的页数,分页功能。 100条
        rows:data2.rows
    }
};

export default {//前面键是请求方式与请求地址,后边值是返回的数据
    'get|/article/list': articleList,
    'get|/article2/list': List,

}

2.4 mock文件夹下创建mock2.js

const Mock = require('mockjs') //   这个是引用库
 
const Random = Mock.Random    // 生成随机数
 
let Result = {
    code: 200,
    msg: '操作成功',
    data: null
}
 
// mock.mock的目的就是拦截目的,这样axios的访问,就可以被拦截了。但是一定要记得, 在main.js当中引入,只有引入了才生效。
Mock.mock('/captcha', 'get', () => {
 
    Result.data = {
        token: Random.string(32),
        captchaImg: Random.dataImage('120x40', 'p7n5w')
    }
    return Result
})
 
export default Mock.mock('/login', 'post', () => {
 
    // 无法在header中传入数jwt
 
    // Result.code = 400
    // Result.msg = "验证码错误"
 
    return Result
})
Mock.mock('/sys/userInfo', 'get', () => {
 
    Result.data = {
        id: "1",
        username: "test",
        avatar: "https://image-1300566513.cos.ap-guangzhou.myqcloud.com/upload/images/5a9f48118166308daba8b6da7e466aab.jpg"
    }
 
    return Result
})
 
Mock.mock('/logout', 'post', () => {
 
    return Result
})
 
// 获取用户菜单以及权限接口
Mock.mock('/sys/menu/nav', 'get', () => {
 
    let nav = [
        {
            name: 'SysManga',
            title: '系统管理',
            icon: 'el-icon-s-operation',
            component: '',
            path: '',
            children: [
                {
                    name: 'SysUser',
                    title: '用户管理',
                    icon: 'el-icon-s-custom',
                    path: '/sys/users',
                    component: 'sys/User',
                    children: []
                },
                {
                    name: 'SysRole',
                    title: '角色管理',
                    icon: 'el-icon-rank',
                    path: '/sys/roles',
                    component: 'sys/Role',
                    children: []
                },
                {
                    name: 'SysMenu',
                    title: '菜单管理',
                    icon: 'el-icon-menu',
                    path: '/sys/menus',
                    component: 'sys/Menu',
                    children: []
                }
            ]
        },
        {
            name: 'SysTools',
            title: '系统工具',
            icon: 'el-icon-s-tools',
            path: '',
            component: '',
            children: [
                {
                    name: 'SysDict',
                    title: '数字字典',
                    icon: 'el-icon-s-order',
                    path: '/sys/dicts',
                    component: '',
                    children: []
                },
            ]
        }
    ]
 
    let authoritys = ['sys:user:list', "sys:user:save", "sys:user:delete"]
 
    Result.data = {
        nav: nav,
        authoritys: authoritys
    }
 
    return Result
})

2.5 mock文件夹下创建mock3.js

//http://mockjs.com/examples.html
import Mock from 'mockjs'
import url from 'url'
/*
mock.mock()
参数1:请求地址 选填  url
参数2: 请求类型 选填  type
参数3:数据模板 | 函数   
*/
var data = Mock.mock({
    "data|100":[   //意思是data数组中有100条数据
        {  //这个对象是用来写数据模板的
          "id|+1":0,   //初始值是0每次id都+1
          "goodsName":"@ctitle(3, 5)",   //看官网,这个名字是3-5之间的
          "goodsPrice|+1":100,   //这个类似上面的id一个,只是初始值是从100开始的
          "address":"@county(true)",   //这个是地址,@county(true)  对象的属性值都是mock.mock()提供的方法,直接拿过来用就可以了
          "tel":/^1(3|5|7|8|9)\d{9}$/,   //正则写的电话后面1开头,正则不懂自己去学!!!!!!!!!!!很重要
          "goodsImg":"@image('200x100', '#894FC4', '#FFF', 'alley')", // 图片
          "date":'@date("yyyy-MM-dd M:dd:d")',  //时间
          "email":"@email()",  //邮箱
          "name":"@ctitle(10, 30)", //10-30
          "text":"@cparagraph(1, 3)", //备注用
          "img":"@dataImage('200x100', 'Hello')", //图片200*100
          "datetime":'@datetime("yyyy-MM-dd A HH:mm:ss")', //"1974-01-08 PM 23:54:57"
          "string":'@string("lower", 5)', //"string5"
          "number|1-800":800,   //返回1-800的随机数
          "url":"@url",  //返回随机url地址
          "word":Mock.Random.cword(5,20),  //返回5-20个随机汉字
          "array|1-10": [  //返回1-10个随机元素的数组
            {
              "name|+1": [
                "Hello",
                "Mock.js",
                "!"
              ]
            }
          ],//数组中含有数组的
          
          'dds':'caiyufu'
        }
    ],
    code:200,
    message:'请求数据成功'
})
 
console.log(data,'ddw');//打印这Mock.mock() 赋值的内容,直接在终端运行就 可以了
 
//  .........这个是通过get  拦截的AJAX
Mock.mock(/\goods\/goodsList/,"get",function(options){
    let {limit,page} = url.parse(options.url,true).query;// 解构赋值,结合上面看就懂了
    // return data.data.slice(0,4);//获取0-4条的数据,
    return data.data.slice((page-1)*limit,(limit*page)-1)  //data.data是上面的数据,这里获取的是
})
 
 
export default Mock.mock('/postdata1','post',{
    success: true,
    message: '@cparagraph',
    // 属性 list 的值是一个数组,其中含有 1 到 5 个元素
    'list|1-5': [{
        // 属性 sid 是一个自增数,起始值为 1,每次增 1
        'sid|+1': 1,
        // 属性 userId 是一个5位的随机码
        'userId|5': '',
    }]
})

2.6 使用axios调用接口

axios.get("/goods/goodsList", {   //这个是通过get发送的
  params: {
    limit: 5,  //一页有5条数据
    page: 1   //第几页
  }
}).then((data) => {
  console.log(data);
});

axios.post('/postdata1', {
  params: {
    name: 'jack'
  }
})
  .then((res) => {
    console.log(res.data)
  })
  .catch((err) => {
    console.log(err)
  })

axios.get('/sys/menu/nav').then(res => {
  console.log("/sys/menu/nav")
  console.log(res)
})

axios.get('/article/list').then(res => {
  console.log("/article/list")
  console.log(res)
})

参考链接:

http://runxinzhi.com/enhengenhengNymph-p-15665564.html

标签:name,项目,sys,mock,使用,data,Mock,icon
From: https://www.cnblogs.com/domin520Jian/p/17482781.html

相关文章

  • springboot项目启动失败之 org.springframework.boot.env.OriginTrackedYamlLoader.cr
    1、检查一下父项目的module的依赖是否,以及版本是否一致。例如<dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.30</version></dependency>2、如何知道自己的org.yaml的版本,可以双击Shift键,输入如图所示,注意划红线的地方就是......
  • IKEA EDI项目开源介绍
    近期为了帮助广大用户更好地使用EDI系统,我们根据以往的项目实施经验,将成熟的EDI项目进行开源。用户安装好知行之桥EDI系统之后,只需要下载我们整理好的示例代码,并放置在知行之桥指定的工作区中,即可开始使用。今天的文章主要为大家介绍IKEAEDI项目,了解如何获取开源的项目代......
  • pair的使用
    介绍pairpair,顾名思义,就是一对数据,而且他们的数据类型也可以不同。pair的用法声明pair<int,string>a;//创建一对first类型为int,second类型为string的数据pair<int,string>a(114514,"homo");//创建一对first数值为114514,second字符串值为“homo”的数据访问a.......
  • 使用vue ui创建vue项目
    vueui是什么?简单来说,vueui是一个可视化图形界面,方便你去创建、更新和管理vue项目,包括下载router,vuex,axios,elementui等插件,配置好一些属性以及依赖关系,方便我们使用,我个人第一次接触它就感觉非常非常非常智能和强大配置步骤  1、安装VueCLI,因为vueui是在VueCLI基础上封......
  • Google Test(GTest)和Google Mock(GMock)入门简介
    GoogleTest1.自定义错误输出:ASSERT_EQ(x.size(),y.size())<<"Vectorsxandyareofunequallength";for(inti=0;i<x.size();++i){EXPECT_EQ(x[i],y[i])<<"Vectorsxandydifferatindex"<<i;}2.ASSERT_......
  • GTest测试框架中的friend(友元)使用注意点
    为了测试MyClass,写了一个测试caseTEST_F(MyClassTest,method){}GoogleTest框架中使用这样的测试单元时,会自动生成一个叫做MyClass_method_Test的类,在MyClass中声明友元的正确方法是:private:friendclassMyClass_method_Test;othervar...goeshere而不是:private:......
  • 创建项目-空项目、java项目、web项目
    空项目(EmptyProject):空项目是一个完全空白的项目,没有任何默认的目录结构或配置文件。你可以根据需要自定义项目的结构和配置,适用于从头开始构建自己的项目。Java项目(JavaProject):Java项目是一个标准的Java应用程序项目,具有默认的目录结构和配置。它包含了源代码目......
  • 博客园博客美化使用APlayer+Meting实现音乐播放
    效果图如下把代码贴入 页脚HTML 代码中<!--线条背景动画--><!--color:线条颜色,默认:‘0,0,0’;三个数字分别为(R,G,B),注意使用,分割opacity:线条透明度0~1,默认0.5count:线条总数量,默认99z-Index:背景的z-Index属性,css用于控制所在层的位置,默认-1(1置顶显......
  • VUE使用Element-ui表达式拼接字符串 el-table-column的prop拼接字符串 拼接table 使
    VUE使用Element-ui表达式拼接字符串el-table-column的prop拼接字符串使用<templateslot-scope="scope">更改td里面值https://blog.csdn.net/WindNolose/article/details/125422409描述VUE中的标签属性,可以在属性前使用:,让属性绑定到data中的动态数据el-table-column标......
  • PPT| XXX电子MES 项目解决方案(可下载)
    PPT总共有71页,受篇幅有限,有需要PPT的同学可以关注:智能制造数字化咨询PPT总共有71页,受篇幅有限,有需要PPT的同学可以关注:智能制造数字化咨询......