Vue接口封裝的完整步驟記錄
首先根據接口寫好對應頁面的請求
內容如圖盡量保證js文件名稱與頁面文件名稱相同(易於查找)
根據文件目錄動態引入/導出接口
提高便捷性
/** * 自動引入當前文件夾下所有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' import { 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 return 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, type: 'error', 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接口封裝內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!