Mockjs ---封裝簡化


mock--index.js

只向外暴露這一個文件

// 導入擴展函數
import './extends'
// 導入商品模塊
import './goods'

mock--extends.js

擴展文件--自己分裝的數據

// 導入模擬假數據的包
import { Random } from 'mockjs'

// 自定義一個數組--隨機獲取這個數組里邊的值--引用Random
// 創建自定義Mock函數
Random.extend({
  // 自定義函數名:function 函數
  fruit: function () {
    const arr = ['榴蓮', '菠蘿蜜', '椰子', '蘋果', '菠蘿']
    return this.pick(arr)
  }
})

mock--goods.js

商品模塊

// 導入模擬假數據的包
import Mock from 'mockjs'
// 通過Mock.mock()來模擬API接口----GET請求
// eslint-disable-next-line no-undef
Mock.mock('/api/goodslist', 'get', {
  status: 200,
  message: '獲取商品列表成功',
  // 生成5到10條,或者直接data|5條數據
  'data|5-10': [
    {
      // mock自增函數@increment-從1開始
      id: '@increment(1)',
      // 隨機返回中文文字-顯示名字
      name: '@cword(2, 8)',
      // 隨機返回一個自然數
      price: '@natural(2, 10)',
      count: '@natural(100, 999)',
      // 建議使用 data字符串壓縮64格式,你建議url地址請求
      img: '@dataImage(78x78)'
    }
  ]
})
  
  // 通過Mock.mock()來模擬API接口---POST請求
  Mock.mock('/api/addgoods', 'post', function (option) {
  // 這里的option是請求相關的參數
    console.log(option)
    return {
      status: 200,
      message: '添加商品成功'
    }
    /*
    外層的 mock是攔截請求的
    返回參數要想引用函數,需要再次引用mock函數
    return Mock.mock({
        status: 200,
        message: '@cword(2,5)'
    })
    */
  })
  
  // 通過Mock.mock()來模擬API接口----GET請求--請求帶參數--根據id返回商品詳情
  /*
  Mock.mock('/api/getgoods/1', 'get', {
    data: {
      id: 9,
      name: '蘋果',
      price: 2,
      img: '@dataImage(78x78)'
    },
    status: 200,
    message: '獲取商品詳情成功'
  })
  */
  // 動態獲取id---轉義字符
  /*
  Mock.mock(/\/api\/getgoods/, 'get', {
    data: {
      id: 9,
      name: '蘋果',
      price: 2,
      img: '@dataImage(78x78)'
    },
    status: 200,
    message: '獲取商品詳情成功'
  })
  */
  // 獲取傳過來的參數id--使用正則拆分
  Mock.mock(/\/api\/getgoods/, 'get', function (option) {
    console.log(option)
  
    const res = /\/api\/getgoods\/(\d+)/.exec(option.url)
    console.log(res)
    return Mock.mock({
      data: {
      // 轉成數字
        id: res[1] - 0,
        name: '@fruit()', // 調用自定義數組
        price: 2,
        img: '@dataImage(78x78)'
      },
      status: 200,
      message: '獲取商品詳情成功'
    })
  })

然而main.js 不用變

直接導入的index.js

import Vue from 'vue'
import App from './App.vue'
import './plugins/element.js'

// 導入mock 文件---打開vue ui  安裝axios依賴
import './mock/index.js'
import axios from 'axios'
Vue.config.productionTip = false
// 全局掛載
Vue.prototype.$http = axios
new Vue({
  render: h => h(App)
}).$mount('#app')

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM