<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        vue中axios請求的封裝實例代碼

        來源:懂視網 責編:小采 時間:2020-11-27 21:59:54
        文檔

        vue中axios請求的封裝實例代碼

        vue中axios請求的封裝實例代碼:axios Axios 是一個基于 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中, 也是vue官方推薦使用的http庫;封裝axios,一方面為了以后維護方便,另一方面也可以對請求進行自定義處理 安裝 npm i axios 封裝 我把axios請求封裝在htt
        推薦度:
        導讀vue中axios請求的封裝實例代碼:axios Axios 是一個基于 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中, 也是vue官方推薦使用的http庫;封裝axios,一方面為了以后維護方便,另一方面也可以對請求進行自定義處理 安裝 npm i axios 封裝 我把axios請求封裝在htt

        axios

        Axios 是一個基于 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中, 也是vue官方推薦使用的http庫;封裝axios,一方面為了以后維護方便,另一方面也可以對請求進行自定義處理

        安裝

        npm i axios

        封裝

        我把axios請求封裝在http.js中,重新把get請求,post請求封裝了一次

        首先,引入axios

        import axios from 'axios'

        設置接口請求前綴

        一般我們開發都會有開發、測試、生產環境,前綴需要加以區分,我們利用node環境變量來作判斷,

        if (process.env.NODE_ENV === 'development') {
         axios.defaults.baseURL = 'http://dev.xxx.com'
        } else if (process.env.NODE_ENV === 'production') {
         axios.defaults.baseURL = 'http://prod.xxx.com'
        }

        在localhost調試時,直接用開發地址一般都會有跨域的問題,所以我們還需要配置代理

        本項目是vue cli3搭建的,代理配置是在vue.config.js文件中:

        module.exports = {
         devServer: {
         proxy: {
         '/proxyApi': {
         target: 'http://dev.xxx.com',
         changeOrigin: true,
         pathRewrite: {
         '/proxyApi': ''
         }
         }
         }
         }
        }

        這樣就成功把/proxyApi 指向了 'http://dev.xxx.com',重啟服務

        修改一下http.js中的配置

        if (process.env.NODE_ENV === 'development') {
         axios.defaults.baseURL = '/proxyApi'
        } else if (process.env.NODE_ENV === 'production') {
         axios.defaults.baseURL = 'http://prod.xxx.com'
        }

        攔截器

        接著設置超時時間和請求頭信息

        axios.defaults.timeout = 10000
        // 請求頭信息是為post請求設置
        axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'

        axios很好用,其中之一就是它的攔截器十分強大,我們就可以為請求和響應設置攔截器,比如請求攔截器可以在每個請求里加上token,做了統一處理后維護起來也方便,響應攔截器可以在接收到響應后先做一層操作,如根據狀態碼判斷登錄狀態、授權。

        // 請求攔截器
        axios.interceptors.request.use(
         config => {
         // 每次發送請求之前判斷是否存在token
         // 如果存在,則統一在http請求的header都加上token,這樣后臺根據token判斷你的登錄情況,此處token一般是用戶完成登錄后儲存到localstorage里的
         token && (config.headers.Authorization = token)
         return config
         },
         error => {
         return Promise.error(error)
         })
        // 響應攔截器
        axios.interceptors.response.use(response => {
         // 如果返回的狀態碼為200,說明接口請求成功,可以正常拿到數據
         // 否則的話拋出錯誤
         if (response.status === 200) {
         return Promise.resolve(response)
         } else {
         return Promise.reject(response)
         }
        }, error => {
         // 我們可以在這里對異常狀態作統一處理
         if (error.response.status) {
         // 對不同返回碼對相應處理
         // 未登錄跳轉登錄頁面
         // 未授權調取授權接口
         // 請求不存在作提示用戶
         return Promise.reject(error.response)
         }
        })

        get post的封裝

        httpGet: 一個參數是請求的url,一個就攜帶的請求參數,返回promise對象

        // get 請求
        export function httpGet({
         url,
         params = {}
        }) {
         return new Promise((resolve, reject) => {
         axios.get(url, {
         params
         }).then((res) => {
         resolve(res.data)
         }).catch(err => {
         reject(err)
         })
         })
        }

        httpPost: 原理和get差不多,需要注意,這里多了個data參數,post請求提交前需要對它進行序列號操作,這里是通過transformRequest做處理;另外兩個參數url,params和get請求的一樣;

        // post請求
        export function httpPost({
         url,
         data = {},
         params = {}
        }) {
         return new Promise((resolve, reject) => {
         axios({
         url,
         method: 'post',
         transformRequest: [function (data) {
         let ret = ''
         for (let it in data) {
         ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
         }
         return ret
         }],
         // 發送的數據
         data,
         // url參數
         params
        
         }).then(res => {
         resolve(res.data)
         })
         })
        }

        如何使用

        我把所有的接口調用都在api.js文件中

        先引入封裝好的方法,再在要調用的接口重新封裝成一個方法暴露出去

        import { httpGet, httpPost } from './http'
        export const getorglist = (params = {}) => httpGet({ url: 'apps/api/org/list', params })

        在頁面中可以這樣調用:

        // .vue
        import { getorglist } from '@/assets/js/api'
        
        getorglist({ id: 200 }).then(res => {
         console.log(res)
        })

        這樣可以把api統一管理起來,以后維護修改只需要在api.js文件操作即可。

        完整代碼

        最后貼上完整代碼

        // http.js
        import axios from 'axios'
        
        // 環境的切換
        if (process.env.NODE_ENV === 'development') {
         axios.defaults.baseURL = '/proxyApi'
        } else if (process.env.NODE_ENV === 'production') {
         axios.defaults.baseURL = 'http://prod.xxx.com'
        }
        
        // 請求攔截器
        axios.interceptors.request.use(
         config => {
         token && (config.headers.Authorization = token)
         return config
         },
         error => {
         return Promise.error(error)
         })
        
        axios.defaults.timeout = 10000
        
        axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
        
        // 響應攔截器
        axios.interceptors.response.use(response => {
         if (response.status === 200) {
         return Promise.resolve(response)
         } else {
         return Promise.reject(response)
         }
        }, error => {
         if (error.response.status) {
         // 對不同返回碼對相應處理
         return Promise.reject(error.response)
         }
        })
        
        // get 請求
        export function httpGet({
         url,
         params = {}
        }) {
         return new Promise((resolve, reject) => {
         axios.get(url, {
         params
         }).then((res) => {
         resolve(res.data)
         }).catch(err => {
         reject(err)
         })
         })
        }
        
        // post請求
        export function httpPost({
         url,
         data = {},
         params = {}
        }) {
         return new Promise((resolve, reject) => {
         axios({
         url,
         method: 'post',
         transformRequest: [function (data) {
         let ret = ''
         for (let it in data) {
         ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
         }
         return ret
         }],
         // 發送的數據
         data,
         // url參數
         params
        
         }).then(res => {
         resolve(res.data)
         })
         })
        }
        // api.js
        import { httpGet, httpPost } from './http'
        export const getorglist = (params = {}) => httpGet({ url: 'apps/api/org/list', params })
        
        export const save = (data) => {
         return httpPost({
         url: 'apps/wechat/api/save_member',
         data
         })
        }
        // .vue
        <script>
        import { getorglist } from '@/assets/js/api'
        export default {
         name: 'upload-card',
         data() {},
         mounted() {
         getorglist({ id: 200 }).then(res => {
         // console.log(res)
         })
         },
        }
        </script>

        總結

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        vue中axios請求的封裝實例代碼

        vue中axios請求的封裝實例代碼:axios Axios 是一個基于 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中, 也是vue官方推薦使用的http庫;封裝axios,一方面為了以后維護方便,另一方面也可以對請求進行自定義處理 安裝 npm i axios 封裝 我把axios請求封裝在htt
        推薦度:
        標簽: VUE 請求 使用的
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 69视频免费观看l| eeuss影院ss奇兵免费com| 久久久久久久久久国产精品免费| 免费国产美女爽到喷出水来视频| 91在线亚洲综合在线| 永久免费bbbbbb视频| 亚洲国产AV一区二区三区四区| 成年女人视频网站免费m| 亚洲成年网站在线观看| 成人免费777777| 青草久久精品亚洲综合专区| 亚洲图片激情小说| 91香蕉国产线在线观看免费| 亚洲网红精品大秀在线观看| 亚洲美女aⅴ久久久91| aⅴ在线免费观看| 亚洲精品永久在线观看| 免费中文字幕一级毛片| 和老外3p爽粗大免费视频| 久久91亚洲精品中文字幕| 在线视频免费观看爽爽爽| 亚洲性无码AV中文字幕| 亚洲国产精品激情在线观看| 亚洲日韩在线观看免费视频| 亚洲av无码不卡一区二区三区| 67194国产精品免费观看| 中文字幕亚洲日韩无线码| 免费在线观看一级片| 亚洲免费在线视频观看| 国产精品va无码免费麻豆| aa午夜免费剧场| 亚洲第一成年网站大全亚洲| 免费看www视频| 成全高清在线观看免费| 亚洲无线码在线一区观看| 免费在线观看h片| 精品一区二区三区免费毛片| 亚洲精品制服丝袜四区| 在线观看成人免费视频| 中文字幕无线码免费人妻| 亚洲中文字幕久久精品无码2021|