摘要:從到使用開發實戰四封裝有很多同學看了本系列的前幾篇之后建議我暫時先不用,于是小肆之后將把換成繼續下面的文章。前置閱讀用從到做一個完整功能手機站一從到開發實戰手機站二提交規范配置從到使用開發實戰三知識儲備
從0到1使用VUE-CLI3開發實戰(四): Axios封裝
有很多同學看了本系列的前幾篇之后建議我暫時先不用TS,于是小肆之后將把TS換成JS繼續下面的文章。axios 簡介
今天給大家帶來項目中非常重要的一環,配置Axios,一起來看看吧。
首先要明白的是axios是什么:axios是基于promise(諾言)用于瀏覽器和node.js是http客戶端。
axios的作用是什么呢:axios主要是用于向后臺發起請求的,還有在請求中做更多是可控功能。
從瀏覽器中創建 XMLHttpRequest
從 node.js 發出 http 請求
支持 Promise API
攔截請求和響應
轉換請求和響應數據
取消請求
自動轉換JSON數據
客戶端支持防止 CSRF/XSRF
項目配置npm install axios
之后我們新建一個api文件夾用來放接口和axios的配置。
先給大家看看我配置好之后的文件夾目錄結構:
可以說這次配置是我劃分的比較詳細的配置方法了,具體每個文件都分別做什么用,我們現在來看看吧。
這個文件主要創建axios實例并對攔截器進行配置,不理解攔截器的同學可以看看下圖:
import axios from "axios" // 創建 axios 實例 let service = axios.create({ // headers: {"Content-Type": "application/json"}, timeout: 60000 }) // 設置 post、put 默認 Content-Type service.defaults.headers.post["Content-Type"] = "application/json" service.defaults.headers.put["Content-Type"] = "application/json" // 添加請求攔截器 service.interceptors.request.use( (config) => { if (config.method === "post" || config.method === "put") { // post、put 提交時,將對象轉換為string, 為處理Java后臺解析問題 config.data = JSON.stringify(config.data) } // 請求發送前進行處理 return config }, (error) => { // 請求錯誤處理 return Promise.reject(error) } ) // 添加響應攔截器 service.interceptors.response.use( (response) => { let { data } = response return data }, (error) => { let info = {}, { status, statusText, data } = error.response if (!error.response) { info = { code: 5000, msg: "Network Error" } } else { // 此處整理錯誤信息格式 info = { code: status, data: data, msg: statusText } } } ) /** * 創建統一封裝過的 axios 實例 * @return {AxiosInstance} */ export default function() { return service }
index.js文件主要封裝我們幾個常用的方法,get、post、put、delete
import axios from "./axios" let instance = axios() export default { get(url, params, headers) { let options = {} if (params) { options.params = params } if (headers) { options.headers = headers } return instance.get(url, options) }, post(url, params, headers, data) { let options = {} if (params) { options.params = params } if (headers) { options.headers = headers } return instance.post(url, data, options) }, put(url, params, headers) { let options = {} if (headers) { options.headers = headers } return instance.put(url, params, options) }, delete(url, params, headers) { let options = {} if (params) { options.params = params } if (headers) { options.headers = headers } return instance.delete(url, options) } }
install.js文件可以把我們所有的api接口安裝到全局,之后我們在main.js文件中導入就可以了。
import apiList from "./apiList" const install = function(Vue) { if (install.installed) { return install.installed = true Object.defineProperties(Vue.prototype, { $api: { get() { return apiList } } }) } export default { install }
import api from "./api/install" Vue.use(api)
把我們所有的api文件夾導入到這一個文件中來。
import matches from "./matches" import user from "./user" export default { matches, user }
根據不同的環境設定不同的baseUrl,在配置這個文件前,我們先需要做如下幾件事:
1.根目錄新建.env.dev文件并在文件內寫入NODE_ENV = "dev"
2.在package.json文件內添加:
"build:dev": "vue-cli-service build --mode dev", "build:pre": "vue-cli-service build --mode pre",
以下是baseUrl.js的代碼:
let baseUrl = "/api" // 本地代理 switch (process.env.NODE_ENV) { case "dev": baseUrl = "http://testserver.feleti.cn/" // 測試環境url break case "pre": baseUrl = "https://pre-server.feleti.cn" // 預上線環境url break case "production": baseUrl = "https://api.feleti.cn" // 生產環境url break } export default baseUrl
這兩個文件夾都是根據api類型進行區分的,在項目以后也建議大家根據api類型劃分出不同的文件存放,在小項目中這樣做可能顯得很麻煩,但如果項目比較大,這樣做的優勢就體現出來了。
我們就只看看matches文件夾下的內容:
把一個類型下的所有url接口放入這一個文件,我只放了一個暫時,可以繼續添加。
import baseUrl from "../baseUrl" export default { matches: baseUrl + "/matches" }
有些接口需要在header中添加token或是其他,可以按如下配置。
import api from "../index" import urls from "./urls" const header = {} export default { matches(params) { // return出去了一個promise return api.get(urls.matches, params, header) } }
配置完上述全部文件就算是大功告成了,下面我們看看如何使用吧。
組件中調用created() { this.matches() }, methods: { async matches() { // 這里用try catch包裹,請求失敗的時候就執行catch里的 try { //定義參數對象 let params = { type: "zc" } let res = await this.$api.matches.matches(params) console.log("?getMatches -> res", res) } catch (e) { console.log("?catch -> e", e) } } }
之后我們就可以在控制臺看到我們調用成功的輸出日志啦:
在實際工作中,我們盡量要把項目做的細致一些,尤其是項目開始之前的配置,今天所涉及到的很多文件在之后的配置中還會有進步的更改,比如配置用戶相關的接口、配置全局loading等,大家只要能把今天的內容完全理解,之后再配置這里就很容易啦。
前置閱讀:用vue-cli3從0到1做一個完整功能手機站(一)
從0到1開發實戰手機站(二):Git提交規范配置
從0到1使用VUE-CLI3開發實戰(三): ES6知識儲備
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101414.html
摘要:小肆前幾天發了一篇年精品開源項目庫的匯總,今天小肆要使用的是在組件中排行第三的。記得點好看呦前置閱讀用從到做一個完整功能手機站一從到開發實戰手機站二提交規范配置從到使用開發實戰三知識儲備從到使用開發實戰四封裝 小肆前幾天發了一篇2019年Vue精品開源項目庫的匯總,今天小肆要使用的是在UI組件中排行第三的Vuetify。 vuetify介紹 Vuetify是一個漸進式的框架,完全根據M...
摘要:詳細具體的使用可以見文章手摸手,帶你優雅的使用。為了加速線上鏡像構建的速度,我們利用源進行加速并且將一些常見的依賴打入了基礎鏡像,避免每次都需要重新下載。 完整項目地址:vue-element-admin系類文章二:手摸手,帶你用vue擼后臺 系列二(登錄權限篇)系類文章三:手摸手,帶你用vue擼后臺 系列三(實戰篇)系類文章四:手摸手,帶你用vue擼后臺 系列四(vueAdmin 一...
摘要:無需使用服務器實時動態編譯,而是使用預渲染方式,在構建時簡單地生成針對特定路由的靜態文件。與可以部署在任何靜態文件服務器上的完全靜態單頁面應用程序不同,服務器渲染應用程序,需要處于運行環境。更多的服務器端負載。 目錄結構 -no-ssr-demo 未做ssr之前的項目代碼用于對比 -vuecli2ssr 將vuecli生成的項目轉為ssr -prerender-demo 使用prer...
摘要:從到使用開發實戰六這是一個有代碼潔癖的項目一個小故事一天我路過一座橋,碰巧看見一個人想跳河自殺。配置什么是是一個開源的代碼檢查工具,由于年月創建。使用編寫,這樣既可以有一個快速的運行環境的同時也便于安裝。 從0到1使用VUE-CLI3開發實戰(六):這是一個有代碼潔癖的項目 一個小故事 一天我路過一座橋,碰巧看見一個人想跳河自殺。我跑過去對他大喊道:別跳,別死啊。為什么不讓我跳?他說。...
閱讀 1039·2021-09-13 10:29
閱讀 3390·2019-08-29 18:31
閱讀 2633·2019-08-29 11:15
閱讀 3011·2019-08-26 13:25
閱讀 1369·2019-08-26 12:00
閱讀 2293·2019-08-26 11:41
閱讀 3377·2019-08-26 10:31
閱讀 1488·2019-08-26 10:25