1. 程式人生 > 程式設計 >Vue介面封裝的完整步驟記錄

Vue介面封裝的完整步驟記錄

首先根據介面寫好對應頁面的請求

內容如圖儘量保證js檔名稱與頁面檔名稱相同(易於查詢)

Vue介面封裝的完整步驟記錄

根據檔案目錄動態引入/匯出介面

提高便捷性

/**
 * 自動引入當前資料夾下所有module
 * require.context(directory,useSubdirectories = false,regExp = /^.//);
 * @param {String} directory 讀取檔案的路徑
 * @param {Boolean} directory 匹配檔案的正則表示式
 * @param {regExp} regExp 讀取檔案的路徑
 */
 const modulesFiles = require.context(
    './',// 在當前目錄下查詢
    false,// 不遍歷子資料夾
    /\.js$/ // 正則匹配 以 .js結尾的檔案
)
 const modules = modulesFiles.keys().reduce((modules,modulePath) => {
   const moduleName = modulePath.replace(/^.\/(.*)\.js/,'$1')
   const value = modulesFiles(
程式設計客棧
modulePath) modules[moduleName] = value.default return modules },{})程式設計客棧 export default modules

根據專案情況編寫攔截/插入內容

import axios from 'axios'
imporhttp://www.cppcns.comt { MessageBox,Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'

// create an axios instance
const service = axios.create({
  baseURL: process.env.
vue
_APP_BASE_API,// url = base url + request url // withCredentials: true,// send cookies when cross-domain requests timeout: 5000 // request timeout }) // request interceptor service.interceptors.request.use( config => { // 在傳送請求之前做些什麼 if (store.getters.token) { // let each request carry token讓每個請求攜帶令牌 // ['X-Token'] is a custom headers key 是一個自定義標題鍵 // please modify it according to the actual situation請根據實際情況修改 config.headers['X-Token'] = getToken() } return config },error => { // do something with request error console.log(error) // for debug return Promise.reject(error) } ) // response interceptor service.interceptors.response.use( /** * If you want to get http information such as headers or status如果您想獲取http資訊,如標頭或狀態 * Please returnhttp://www.cppcns.com
response => response */ /** * Determine the request status by custom code通過自定義程式碼確定請求狀態 * Here is just an example這裡只是一個例子 * You can also judge the status by HTTP Status Code您還可以通過HTTP狀態碼來判斷狀態 */ response => { const res = response.data // console.log(res); // 如果自定義程式碼不是20000,則判斷為錯誤. if (res.code !== 200) { Message({ message: res.message || 'Error',type: 'error',duration: 5 * 1000 }) // 50008: 非法token; 50012: 其他客戶端已登入; 50014: Token 已過期; if (res.code === 50008 || res.code === 50012 || res.code === 50014) { // to re-login MessageBox.confirm('您已登出,可以取消以停留在此頁面,或重新登入','確認登出',{ confirmButtonText: 'Re-Login',程式設計客棧 cancelButtonText: 'Cancel',type: 'warning' }).then(() => { store.dispatch('user/resetToken').then(() => { location.reload() }) }) } return Promise.reject(new Error(res.message || 'Error')) } else { return res } },error => { console.log('err' + error) // for debug Message({ message: error.message,duration: 5 * 1000 }) return Promise.reject(error) } ) export default service

編寫env檔案

# just a flag
ENV = 'development'

# base api
VUE_APP_BASE_API = 'http://192.168.2.44:5001/v1'

vue繼承api

import serve from './api/index'
Vue.prototype.$api = serve;

使用

getAssetsList() {
  this.$api.assets
    .getAssetsList(this.queryInfo.num,this.queryInfo.size)
    .then((res) => {
      this.assetsList = res.data.cards
      this.total = res.data.page.totalCount
    })
    .catch(() => {
      this.$message.error({
        message: "失敗",duration: 700,})
    })
},

總結

到此這篇關於Vue介面封裝的文章就介紹到這了,更多相關Vue介面封裝內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!