摘要:從到使用開發(fā)實(shí)戰(zhàn)四封裝有很多同學(xué)看了本系列的前幾篇之后建議我暫時(shí)先不用,于是小肆之后將把換成繼續(xù)下面的文章。前置閱讀用從到做一個(gè)完整功能手機(jī)站一從到開發(fā)實(shí)戰(zhàn)手機(jī)站二提交規(guī)范配置從到使用開發(fā)實(shí)戰(zhàn)三知識(shí)儲(chǔ)備
從0到1使用VUE-CLI3開發(fā)實(shí)戰(zhàn)(四): Axios封裝
有很多同學(xué)看了本系列的前幾篇之后建議我暫時(shí)先不用TS,于是小肆之后將把TS換成JS繼續(xù)下面的文章。axios 簡(jiǎn)介
今天給大家?guī)?lái)項(xiàng)目中非常重要的一環(huán),配置Axios,一起來(lái)看看吧。
首先要明白的是axios是什么:axios是基于promise(諾言)用于瀏覽器和node.js是http客戶端。
axios的作用是什么呢:axios主要是用于向后臺(tái)發(fā)起請(qǐng)求的,還有在請(qǐng)求中做更多是可控功能。
從瀏覽器中創(chuàng)建 XMLHttpRequest
從 node.js 發(fā)出 http 請(qǐng)求
支持 Promise API
攔截請(qǐng)求和響應(yīng)
轉(zhuǎn)換請(qǐng)求和響應(yīng)數(shù)據(jù)
取消請(qǐng)求
自動(dòng)轉(zhuǎn)換JSON數(shù)據(jù)
客戶端支持防止 CSRF/XSRF
項(xiàng)目配置npm install axios
之后我們新建一個(gè)api文件夾用來(lái)放接口和axios的配置。
先給大家看看我配置好之后的文件夾目錄結(jié)構(gòu):
可以說(shuō)這次配置是我劃分的比較詳細(xì)的配置方法了,具體每個(gè)文件都分別做什么用,我們現(xiàn)在來(lái)看看吧。
這個(gè)文件主要?jiǎng)?chuàng)建axios實(shí)例并對(duì)攔截器進(jìn)行配置,不理解攔截器的同學(xué)可以看看下圖:
import axios from "axios" // 創(chuàng)建 axios 實(shí)例 let service = axios.create({ // headers: {"Content-Type": "application/json"}, timeout: 60000 }) // 設(shè)置 post、put 默認(rèn) Content-Type service.defaults.headers.post["Content-Type"] = "application/json" service.defaults.headers.put["Content-Type"] = "application/json" // 添加請(qǐng)求攔截器 service.interceptors.request.use( (config) => { if (config.method === "post" || config.method === "put") { // post、put 提交時(shí),將對(duì)象轉(zhuǎn)換為string, 為處理Java后臺(tái)解析問(wèn)題 config.data = JSON.stringify(config.data) } // 請(qǐng)求發(fā)送前進(jìn)行處理 return config }, (error) => { // 請(qǐng)求錯(cuò)誤處理 return Promise.reject(error) } ) // 添加響應(yīng)攔截器 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 { // 此處整理錯(cuò)誤信息格式 info = { code: status, data: data, msg: statusText } } } ) /** * 創(chuàng)建統(tǒng)一封裝過(guò)的 axios 實(shí)例 * @return {AxiosInstance} */ export default function() { return service }
index.js文件主要封裝我們幾個(gè)常用的方法,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接口安裝到全局,之后我們?cè)趍ain.js文件中導(dǎo)入就可以了。
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文件夾導(dǎo)入到這一個(gè)文件中來(lái)。
import matches from "./matches" import user from "./user" export default { matches, user }
根據(jù)不同的環(huán)境設(shè)定不同的baseUrl,在配置這個(gè)文件前,我們先需要做如下幾件事:
1.根目錄新建.env.dev文件并在文件內(nèi)寫入NODE_ENV = "dev"
2.在package.json文件內(nèi)添加:
"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/" // 測(cè)試環(huán)境url break case "pre": baseUrl = "https://pre-server.feleti.cn" // 預(yù)上線環(huán)境url break case "production": baseUrl = "https://api.feleti.cn" // 生產(chǎn)環(huán)境url break } export default baseUrl
這兩個(gè)文件夾都是根據(jù)api類型進(jìn)行區(qū)分的,在項(xiàng)目以后也建議大家根據(jù)api類型劃分出不同的文件存放,在小項(xiàng)目中這樣做可能顯得很麻煩,但如果項(xiàng)目比較大,這樣做的優(yōu)勢(shì)就體現(xiàn)出來(lái)了。
我們就只看看matches文件夾下的內(nèi)容:
把一個(gè)類型下的所有url接口放入這一個(gè)文件,我只放了一個(gè)暫時(shí),可以繼續(xù)添加。
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出去了一個(gè)promise return api.get(urls.matches, params, header) } }
配置完上述全部文件就算是大功告成了,下面我們看看如何使用吧。
組件中調(diào)用created() { this.matches() }, methods: { async matches() { // 這里用try catch包裹,請(qǐng)求失敗的時(shí)候就執(zhí)行catch里的 try { //定義參數(shù)對(duì)象 let params = { type: "zc" } let res = await this.$api.matches.matches(params) console.log("?getMatches -> res", res) } catch (e) { console.log("?catch -> e", e) } } }
之后我們就可以在控制臺(tái)看到我們調(diào)用成功的輸出日志啦:
在實(shí)際工作中,我們盡量要把項(xiàng)目做的細(xì)致一些,尤其是項(xiàng)目開始之前的配置,今天所涉及到的很多文件在之后的配置中還會(huì)有進(jìn)步的更改,比如配置用戶相關(guān)的接口、配置全局loading等,大家只要能把今天的內(nèi)容完全理解,之后再配置這里就很容易啦。
前置閱讀:用vue-cli3從0到1做一個(gè)完整功能手機(jī)站(一)
從0到1開發(fā)實(shí)戰(zhàn)手機(jī)站(二):Git提交規(guī)范配置
從0到1使用VUE-CLI3開發(fā)實(shí)戰(zhàn)(三): ES6知識(shí)儲(chǔ)備
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/101414.html
摘要:小肆前幾天發(fā)了一篇年精品開源項(xiàng)目庫(kù)的匯總,今天小肆要使用的是在組件中排行第三的。記得點(diǎn)好看呦前置閱讀用從到做一個(gè)完整功能手機(jī)站一從到開發(fā)實(shí)戰(zhàn)手機(jī)站二提交規(guī)范配置從到使用開發(fā)實(shí)戰(zhàn)三知識(shí)儲(chǔ)備從到使用開發(fā)實(shí)戰(zhàn)四封裝 小肆前幾天發(fā)了一篇2019年Vue精品開源項(xiàng)目庫(kù)的匯總,今天小肆要使用的是在UI組件中排行第三的Vuetify。 vuetify介紹 Vuetify是一個(gè)漸進(jìn)式的框架,完全根據(jù)M...
摘要:一基礎(chǔ)學(xué)習(xí)模式下圖不僅概括了模式,還描述了在中是如何和以及進(jìn)行交互的。關(guān)于這一點(diǎn)我們將在后續(xù)反應(yīng)系統(tǒng)中討論。父組件通過(guò)向下傳遞數(shù)據(jù)給子組件,子組件通過(guò)給父組件發(fā)送消息。這個(gè)對(duì)象必須是普通對(duì)象原生對(duì)象,及原型屬性會(huì)被忽略。 Vue.js 是用于構(gòu)建交互式的 Web 界面的庫(kù)。Vue.js 提供了 MVVM 數(shù)據(jù)綁定和一個(gè)可組合的組件系統(tǒng),具有簡(jiǎn)單、靈活的 API。 其實(shí)和Jquery一樣...
摘要:詳細(xì)具體的使用可以見文章手摸手,帶你優(yōu)雅的使用。為了加速線上鏡像構(gòu)建的速度,我們利用源進(jìn)行加速并且將一些常見的依賴打入了基礎(chǔ)鏡像,避免每次都需要重新下載。 完整項(xiàng)目地址:vue-element-admin系類文章二:手摸手,帶你用vue擼后臺(tái) 系列二(登錄權(quán)限篇)系類文章三:手摸手,帶你用vue擼后臺(tái) 系列三(實(shí)戰(zhàn)篇)系類文章四:手摸手,帶你用vue擼后臺(tái) 系列四(vueAdmin 一...
摘要:無(wú)需使用服務(wù)器實(shí)時(shí)動(dòng)態(tài)編譯,而是使用預(yù)渲染方式,在構(gòu)建時(shí)簡(jiǎn)單地生成針對(duì)特定路由的靜態(tài)文件。與可以部署在任何靜態(tài)文件服務(wù)器上的完全靜態(tài)單頁(yè)面應(yīng)用程序不同,服務(wù)器渲染應(yīng)用程序,需要處于運(yùn)行環(huán)境。更多的服務(wù)器端負(fù)載。 目錄結(jié)構(gòu) -no-ssr-demo 未做ssr之前的項(xiàng)目代碼用于對(duì)比 -vuecli2ssr 將vuecli生成的項(xiàng)目轉(zhuǎn)為ssr -prerender-demo 使用prer...
摘要:從到使用開發(fā)實(shí)戰(zhàn)六這是一個(gè)有代碼潔癖的項(xiàng)目一個(gè)小故事一天我路過(guò)一座橋,碰巧看見一個(gè)人想跳河自殺。配置什么是是一個(gè)開源的代碼檢查工具,由于年月創(chuàng)建。使用編寫,這樣既可以有一個(gè)快速的運(yùn)行環(huán)境的同時(shí)也便于安裝。 從0到1使用VUE-CLI3開發(fā)實(shí)戰(zhàn)(六):這是一個(gè)有代碼潔癖的項(xiàng)目 一個(gè)小故事 一天我路過(guò)一座橋,碰巧看見一個(gè)人想跳河自殺。我跑過(guò)去對(duì)他大喊道:別跳,別死啊。為什么不讓我跳?他說(shuō)。...
閱讀 1051·2021-09-13 10:29
閱讀 3398·2019-08-29 18:31
閱讀 2648·2019-08-29 11:15
閱讀 3022·2019-08-26 13:25
閱讀 1380·2019-08-26 12:00
閱讀 2324·2019-08-26 11:41
閱讀 3423·2019-08-26 10:31
閱讀 1498·2019-08-26 10:25