欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vue学习-使用mockjs模拟发送数据

程序员文章站 2022-07-10 10:18:16
...

mockjs模拟数据

官方教程中提到

# 安装
npm install mockjs
// 使用 Mock
var Mock = require('mockjs')
var data = Mock.mock({
    // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
    'list|1-10': [{
        // 属性 id 是一个自增数,起始值为 1,每次增 1
        'id|+1': 1
    }]
})
// 输出结果
console.log(JSON.stringify(data, null, 4))

使用:

api/axios.js 正常拦截请求处理响应

import  axios from 'axios'
import config from '@/config'


const baseUrl=process.env.NODE_ENV==='development'?config.baseUrl.dev:config.baseUrl.pro//这种写法是什么意思啊?provess.env.NODE_ENV是什么


class HttpRequest{
    constructor(baseUrl){
        this.baseUrl=baseUrl;
        this.queue={};
    }
    
    getInsideConfig(){
        const config={
            baseURL:this.baseUrl,
            header:{
                //请求头配置
            }
        }
        return config;
    }

    
    interceptors(instance,url){
        instance.interceptors.request.use((config)=>{
            //处理config
            console.log("拦截和处理请求")
            config.data={
                msg:'helloword'
            }
            console.log(config)
            return config
        })
        instance.interceptors.response.use((res)=>{
            //处理响应
            console.log("处理响应")
           // console.log(res)
            return res
        },(error)=>{
            //请求出问题,处理问题
            console.log(error)
            return{error:"网络出错"}
        })
    }

    request(options){
        const instance=axios.create()//创建实例对象
        options=Object.assign(this.getInsideConfig(),options)
        this.interceptors(instance,options.url)
        return instance(options);
    }
    
}

const axiosObj=new HttpRequest(baseUrl);
export default axiosObj

api/data.js

import axios from '@/api/axios'

export const getUserData=()=>{
    return axios.request({
        url:"user",
        method:"get"
    })
}

重要的是api/mock.js的配置:

import Mock from 'mockjs';

//设置请求延时
Mock.setup({
    timeout:1000
})

//直接使用字符串匹配路径,还可以使用正则
// Mock.mock('/api/user',{
//     username:"boun",
//     age:25,
//     gender:"男",
//     type:"1?"
// })

Mock.mock(/\/api\/user/igs,{
    //可以随机图片,邮箱
    username:"boun",
    age:25,
    gender:"男",
    type:"1?",
    "time":"@datetime",//随机生成一个时间
    "score|1-800":800,
    "rank|1-100":100,//随机生成一个数1-100之间
    "nickname":"@cname",//随机生成一个中文名
    "address":"@url",
    "imgUrl":"@image",
    'email':"@email"
})

在最外层main.js中

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

Vue.config.productionTip = false
if(process.env.NODE_ENV=='development') require("@/api/mock")
new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

组件中调用:
Home.vue的script内容

<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'
import {getBannerData} from '@/api/data'
import {getUserData} from '@/api/data'

export default {
  name: 'Home',
  components: {
    HelloWorld
  },
  async mounted(){
   // let result=await getBannerData()
    let result=await getUserData()
    console.log(result.data,result.status)
  }
}
</script>

结果:
vue学习-使用mockjs模拟发送数据

相关标签: vue js