Vue前端如何對(duì)axios的封裝和使用-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)Vue前端如何對(duì)axios的封裝和使用,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)公司從2013年成立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元港北做網(wǎng)站,已為上家服務(wù),為港北各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

Axios 是一個(gè)基于 promise 的 HTTP 庫(kù)。將axios封裝好后能更高效的開(kāi)發(fā)并且方便維護(hù),而且在以后的項(xiàng)目中也能直接套用,所以封裝好是必要的。在參考了很多方法后,我拼湊出了一套我認(rèn)為很實(shí)用的方法。

首先是http目錄下的兩個(gè)文件

helper.js

這個(gè)是功能性文件包括拼接url、過(guò)濾參數(shù)等,把方法集合到一個(gè)文件方便維護(hù)和修改。
讀一遍知道他有什么功能就行了

const helper = {
 // 根據(jù)name獲取地址欄的參數(shù)值
 getQueryString (name) {
  let reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`)
  let hash = window.location.hash
  let search = hash.split('?')
  let r = search[1] && search[1].match(reg)
  if (r != null) return r[2]; return ''
 },
 // 拼接參數(shù)至url
 queryString (url, query) {
  let str = []
  for (let key in query) {
   str.push(key + '=' + query[key])
  }
  let paramStr = str.join('&')
  return paramStr ? `${url}?${paramStr}` : url
 },
 
// 自定義判斷元素類(lèi)型JS
 toType(obj) {
	 return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
	},
// 參數(shù)過(guò)濾函數(shù)
 filterNull(o) {
	 for (var key in o) {
	  if (o[key] === null) {
	   delete o[key]
	  }
	  if (toType(o[key]) === 'string') {
	   o[key] = o[key].trim()
	  } else if (toType(o[key]) === 'object') {
	   o[key] = filterNull(o[key])
	  } else if (toType(o[key]) === 'array') {
	   o[key] = filterNull(o[key])
	  } else if (toType(o[key]) === 'number') {
	   o[key] = filterNull(o[key])
	  }
	 }
	 return o
	}

}
export default helper

http.js

接收請(qǐng)求,暴露接口,包含參數(shù)params、發(fā)往后端的url和token(如果不用JWT的同學(xué)可以省略參數(shù)token),處理后發(fā)往后端

import axios from 'axios'
let qs = require('querystring')
import helper from './helper'

//console.log( process.env.NODE_ENV)
//判斷環(huán)境提供baseURL,注意要與后臺(tái)地址一致
let root = process.env.NODE_ENV === 'development'
 // 開(kāi)發(fā)環(huán)境api接口
 ?
 `http://localhost:3001/api`
 // 生產(chǎn)環(huán)境api接口
 :
 `http://127.0.0.1:3001/api`;
// 引用axios,設(shè)置頭文件
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';


function apiAxios(method, url, params, token) {
 if (params) {
  params = helper.filterNull(params)
 }
 return axios({
  method: method,
  //拼接參數(shù)
  url: method === 'GET'|| method === 'DELETE' ? helper.queryString(url,params) : url,
  data: method === 'POST' || method === 'PUT' ? qs.stringify(params) : null,
  baseURL: root,
  timeout: 10000,
  headers: { Authorization: `Bearer ${token}` },	//jwt
  withCredentials: false
 })
}

// 返回在vue模板中的調(diào)用接口
export default {
 get: function (url, params, token) {
  return apiAxios('GET', url, params, token)
 },
 post: function (url, params, token) {
  return apiAxios('POST', url, params, token)
 },
 put: function (url, params, token) {
  return apiAxios('PUT', url, params, token)
 },
 delete: function (url, params, token) {
  return apiAxios('DELETE', url, params, token)
 },
}

api.js

封裝前端api接口,接受前端頁(yè)面發(fā)來(lái)的請(qǐng)求,封裝后可根據(jù)函數(shù)名判斷類(lèi)型和url給axios文件,方便維護(hù)和開(kāi)發(fā)。

import http from '../http/http.js'
export default {
 login(data, token){
  return http.post("/login",data, token)
 },
 getUserInfo(data, token){
  return http.get("/getUserInfo",data, token)
 }
}

在main.js中引用后就可以全局調(diào)用了

前端中用this.$api.urlName()的格式發(fā)送請(qǐng)求,也可以不經(jīng)過(guò)api直接用this. $http,但是每次都要寫(xiě)url,當(dāng)接口多的時(shí)候比較麻煩。所以推薦用api封裝好。

import api from './api/api.js'
import http from './http/http.js'
//定義全局變量
Vue.prototype.$api = api

Vue.prototype.$http = http

前端中使用:

由于axios返回的是promise對(duì)象,所以要用 .then的形式接收后端發(fā)回來(lái)的response,然后做出相應(yīng)的反饋。

//直接用this.$api調(diào)用api中接口,如果不封裝api接口可以用this.$http
 this.$api.login(data, token).then((res) => {
	console.log(res)
 }).catch((err) => {
 	console.log(res)
 })

關(guān)于“Vue前端如何對(duì)axios的封裝和使用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞名稱:Vue前端如何對(duì)axios的封裝和使用-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://m.kartarina.com/article6/cdciog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)企業(yè)建站小程序開(kāi)發(fā)品牌網(wǎng)站制作App開(kāi)發(fā)商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)
主站蜘蛛池模板: 亚洲av无码一区二区三区人妖| 亚洲精品成人无码中文毛片不卡| 亚洲熟妇av午夜无码不卡| 久久无码人妻一区二区三区| 永久免费av无码网站韩国毛片| 无码天堂va亚洲va在线va| 国产白丝无码免费视频| 亚洲精品天堂无码中文字幕 | 亚洲GV天堂GV无码男同| 日韩精品无码永久免费网站| 亚洲aⅴ无码专区在线观看春色 | 国产成人无码AV片在线观看| 中文字幕乱偷无码AV先锋| 亚洲精品无码mⅴ在线观看| 亚洲成a人片在线观看无码专区| 亚洲日韩中文字幕无码一区 | 久久午夜伦鲁片免费无码| 一本一道中文字幕无码东京热| 日韩人妻无码精品久久久不卡 | 久久久久久亚洲av无码蜜芽| 国产精品免费无遮挡无码永久视频 | 亚洲AV无码乱码在线观看富二代| 无码人妻av一区二区三区蜜臀| 精品无码AV一区二区三区不卡 | 亚洲乱亚洲乱妇无码麻豆| 免费无遮挡无码永久在线观看视频 | 亚洲国产综合无码一区二区二三区| 精品人无码一区二区三区| 日韩欧国产精品一区综合无码| a级毛片无码免费真人久久| 亚洲?V无码乱码国产精品| 免费A级毛片无码免费视| 2019亚洲午夜无码天堂| 麻豆国产精品无码视频| 亚洲成A人片在线观看无码不卡 | 精品日韩亚洲AV无码一区二区三区| 国产精品亚洲а∨无码播放| 亚洲国产精品无码专区| 无码国产色欲XXXXX视频| 少妇人妻偷人精品无码视频新浪 | 777爽死你无码免费看一二区|