vue項目-axios封裝、easy-mock使用

 vue全家桶歸納下來就是javascript

  • 項目構建工具(vue-cli)
  • 路由(vue-router)
  • 狀態管理(vuex)
  • http請求工具

 vue有本身的http請求工具插件vue-resource,可是vue2.0後做者就不在更新了,後更推薦axios。vue

 下面是vue項目中axios經常使用的方法,以及生成虛擬數據的easy-mock的使用方法。java

1、axios安裝和easy-mock的使用node

  1. axiosios

  axios基於http客戶端的promise,面向瀏覽器和nodejs。參考地址: https://www.kancloud.cn/yunye/axios/234845vue-router

  特色vuex

    • 瀏覽器端發起XMLHttpRequests請求vue-cli

    • node端發起http請求npm

    • 支持Promise APIjson

    • 監聽請求和返回

    • 轉化請求和返回

    • 取消請求

    • 自動轉化json數據

    • 客戶端支持抵禦

  安裝

    npm install --save axios 

    爲了解決post默認使用的是x-www-from-urlencoded 去請求數據,致使請求參數沒法傳遞到後臺,因此還須要安裝一個插件QS

    npm install qs

  2. easy-mock

  Easy Mock 是一個可視化,而且能快速生成 模擬數據 的持久化服務。不須要再本地安裝,只須要到官網上註冊登錄後加入或新建項目,在項目內定義接口和返回數據的格式。

  地址:https://www.easy-mock.com/login

  步驟以下:

    1)登錄

    

    2)新建項目

    

    3)新建接口,Base URL是訪問地址

    

    4)定義接口名稱和數據返回格式

    

  這樣一個接口就定義好了,咱們能夠經過請求工具訪問,就能夠獲得 /login中剛定義的數據。更多定義easy-mock返回數據格式的方式,具體請參考官網例子。參考其餘例子:https://blog.csdn.net/qq_42991509/article/details/94577331

  2、axios 使用

  axios的實例方法和配置不少,下面只是經常使用基本的封裝和使用方式。

  在vue項目中src文件夾下,有這幾個須要新增的地方。

  

  1.  appCount.js文件

const HTTP_BASE_URL = 'https://www.easy-mock.com/mock/5d5f5a3f6778c215243b94ea/'  // easy-mock
const TOKEN = '1234' // token
export default {
  HTTP_BASE_URL,
  TOKEN
}

  在appCount.js文件中,咱們能夠放一些全局的變量。例如:訪問地址的ip、token常量,超時取消請求的時常等。

  2. request.js文件

import axios from 'axios'
import appCONST from './appCount.js'

const requestData  = async (url, params = {}) => {
    let res = await axios({
        url: appCONST.HTTP_BASE_URL + url,
        data: params || {},
        method: params.method || 'POST',
        header: params.header || {
            'content-type': 'application/json'
        }
    })
    console.log(res)
    if(requestSuccess(res)) {
        return res.data
    } else {
        throw requestException(res)
    }
}

/**
 * 請求成功
 */
function requestSuccess(res) {
    const status = res.status
    // 請求錯誤
    if (status !== 200) {
      return false
    }
    const resData = res.data
    return !(resData && resData.code !== 1)
  }


/**
 * 異常
 */
function requestException(res) {
    const error = {}
    error.serverCode = res.status
    const resData = res.data
    error.code = resData.code
    error.msg = resData.msg || '系統錯誤'
    error.data = resData.result || {}
    return error
  }

// 導出封裝函數
export default {
    requestData
}

  在上面文件中,requestData方法是咱們封裝的axios請求,在方法中,我並無使用到安裝時qs。由於在方法中定義了請求頭content-type的類型是json格式,因此參數格式直接傳對象進來就能夠了。

  若是沒有定義content-type的類型,那麼默認是application/x-www-form-urlencoded。請求參數在Form Data中,只能上傳鍵值對,而且鍵值對都是間隔分開的。

參數形式:  name1=value1&name2=value2。那麼最好引入qs,而後將params格式化一下,data:qs.stringify(params)。

  3. util.js

  能夠寫一些公共的方法,例如:存取本地緩存,參數格式化等方法。而後在須要用到的地方導入這個文件,就可使用其中的方法了。

  

export const localSave = (key, value) => {
    localStorage.setItem(key, value)
}
  
export const localRead = (key) => {
    return localStorage.getItem(key) || ''
}

  使用方式

<script>
import * as util from '@/libs/util'
export default {
    name: 'login',
    data() {
        return {
           da:'' 
        }
    },
    methods: {
       submit() {
           util.localSave('data', '123')
        }
    }
}
</script>

  4. api.js

import wxRequest from '../libs/request'
// 用戶登陸
const login = (params) => wxRequest.requestData('login', params)

export default {
    login
}

  5. 調用接口

<template>
    <div>
        <button @click="submit()">點我登錄</button>
    </div>
</template>
<script>
import api from '@/api/api'

export default {
    name: 'login',
    data() {
        return {
           da:'' 
        }
    },
    methods: {
        async submit() {
            try {
                const dd = await api.login()
                console.log(dd)
            } catch(err) {
                console.log(err)
            }
        }
    }
}
</script>

  更多方法,例如添加攔截器也挺好用。

相關文章
相關標籤/搜索