<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
        主站蜘蛛池模板: 国产国拍精品亚洲AV片| 国产精品无码免费视频二三区| 亚洲一区无码精品色| 亚洲av日韩精品久久久久久a| 在线观看日本免费a∨视频| 亚洲欧洲精品在线| 37pao成人国产永久免费视频| 久久亚洲日韩精品一区二区三区| a级毛片高清免费视频就| 亚洲av无码国产精品色午夜字幕 | 四虎最新永久免费视频| 亚洲AV区无码字幕中文色| 最近免费字幕中文大全视频| 亚洲图片激情小说| 日韩高清在线高清免费| 美美女高清毛片视频黄的一免费 | 亚洲人xxx日本人18| 日韩伦理片电影在线免费观看| 欧美日韩亚洲精品| 精品国产人成亚洲区| 人妻无码久久一区二区三区免费| 久久亚洲精精品中文字幕| 久久WWW色情成人免费观看| 亚洲精品动漫免费二区| 亚洲人成无码网WWW| 日日麻批免费40分钟无码| 国产精品亚洲专区在线观看| 全部免费国产潢色一级 | 美丽的姑娘免费观看在线播放| 亚洲一区二区三区高清不卡| 全亚洲最新黄色特级网站 | 国产va免费精品观看精品| 国产亚洲精品AAAA片APP| 337p日本欧洲亚洲大胆裸体艺术 | 欧美最猛性xxxxx免费| 精品特级一级毛片免费观看| 亚洲AV无码成人精品区在线观看 | 18禁成年无码免费网站无遮挡| 日韩a毛片免费观看| 亚洲视频小说图片| 亚洲国产V高清在线观看|