Vue后台管理系统练习-4 axios+mock实现数据模拟

首先安装axios与mock

npm i axios & npm i mockjs

在main.js中引用并配置axios

import http from 'axios'
Vue.prototype.$http = http

新建config文件夹,创建index.js配置axios

export default {
  baseUrl: {
    dev: '/api/',  // 开发环境
    pro: ''   // 生产环境
  }
}

在项目中新建api文件夹,创建axios.js,对axios实例进行封装,根据官网中的提示,写入内容如下:

import axios from "axios";
import config from "@/config";

const baseUrl = process.env.NODE_ENV === 'development' ? config.baseUrl.dev : config.baseUrl.pro

class HttpRequest {
  // 初始化
  constructor(baseUrl){
    this.baseUrl = baseUrl
  }

  getInsideConfig(){
    const config = {
      baseUrl: this.baseUrl,
      header: {}
    }
    return config
  }
  // 拦截器
  interceptors(instance) {
    instance.interceptors.request.use(function (config) {
      // 发送请求前
      return config;
    }, function(error) {
      return Promise.reject(error);
    });

    // 添加响应拦截器
    axios.interceptors.response.use(function (response) {
      console.log(response);
    }, function(error) {
      return Promise.reject(error);
    })
  }
  // 发送请求并处理
  request(options) {
    const instance = axios.create()
    // 解构
    options = { ...this.getInsideConfig(), ...options}
    // 拦截
    this.interceptors(instance)

    return instance(options)
  }
}
export default new HttpRequest(baseUrl)

之后要使用axios,可以在api中配置data.js整合所有的数据请求,这里以请求首页数据为例:

import axios from './axios'

export const getData = () => {
  return axios.request({
    url:'/home/getData'
  })
}

然后在HomeArticle.vue中进行引用即可发送网络请求了:

import {getData} from '@/api/data.js'

mounted() {
	getData().then(res => {
		// 数据处理操作后续添加
	})
},

*axios基于promise因此可以使用.then

本项目中我们使用到mock的主要函数为Mock.mock( rurl, function )
因此为了集合不同的数据,首先在api中新建mockServeData文件夹,新建home.js写入

getData() {
	return {
		code: 200,
		orders: [],
		countData:[]
	}
}

这两个是HomeArticle中需要用到的两个数组,就正好写在一起了
写完这个模拟接口之后,在api中新建mock.js文件,使用mock方法拦截’/home/getData’的请求

import Mock from 'mockjs'
import homeApi from './mockServeData/home'

Mock.mock('/home/getData', homeApi.getData)

同时记得在main.js中引入

import '@/api/mock'

此时,如果通过控制台输出能够发现,在我们对’/home/getData’发送axios网络请求时,被mock拦截,替换为mock中配置的getData()返回值

获取了数据后再次对HomeArticle中的mounted进行补全,替换data中储存的静态函数,也能够在页面中显示

mounted() {
  getData().then(res => {
    const { code, orders, countData } = res.data
    if (code === 200){
      this.orders = orders
      this.countData = countData
    }
  })
},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值