日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

如何在Vue項目中使用axios請求

瀏覽:26日期:2022-09-30 08:00:43

在實際的項目中,和后臺的數據交互是少不了的,我通常使用的是 axios 庫,所以以下示例也是以 axios 為基礎來進行封裝的。

1、安裝

首先是 npm 安裝 axios 很簡單:npm install axios

2、沒有封裝存在的問題

如果在沒有封裝接口的項目中,在文件中隨處可以看到如下的接口調用方法:

this.$axios.post('/user/add', { params: {name: this.name,age: this.age }}).then(res => { console.log(res)}).then(err => { console.log(res)})

這樣寫不是不可以,但是存在一些缺陷,接口請求的 url 散布在各個文件中,如果需要在接口調用成功或失敗時做一些處理,就需要更改每個文件。所以把這些接口請求統一集中起來,如果有調整,直接在集中文件中找到修改就好了,而不用再去查每個文件。

3、創建文件

首先在項目的 src 目錄中,新建文件夾及文件目錄結構如下:

├── src 源碼目錄

│ ├── apis 接口文件目錄

│ │ ├── login.api.js 登錄模塊的接口 api

│ │ └── user.api.js 用戶模塊的接口 api

│ ├── services 請求相關文件目錄

│ │ ├── address.js 請求地址配置文件

│ │ └── request.js axios封裝,請求攔截、響應碼處理等操作

api接口文件模塊的劃分,大可以根據自己的實際項目,按業務功能或業務邏輯或其他形式劃分。

4、請求地址配置

一般我們的項目環境都會有多個,少的也會有開發環境和生產環境。正常情況下,在開發環境下和生產模式下有著不同的 baseURL,所以,我們需要根據不同的環境切換不同的 baseURL。

address.js 文件:

// 根據 process.env.NODE_ENV 切換不同的 baseURLconst isPro = process.env.NODE_ENV === ’production’​module.exports = { // ’apis’:vue.config.js中proxy設置的代理 baseURL: isPro ? ’http://192.168.100.120/ceds’ : ’/apis’}5、axios 配置,設置請求頭及響應碼處理

大體思路是通過封裝一個request類,其中包含了get、post等請求方法,這些請求方法又都會去調用 request 方法,該方法通過傳入的不同參數調用原始的 axios 請求,然后返回一個 Promise。

request.js 文件:

import axios from ’axios’import Qs from ’qs’import Vue from ’vue’import { getToken } from ’@Utils/session.utils’ // 存儲獲取token文件import address from ’./address’ // 請求地址​class Request { constructor () {// 創建axios實例this._axios = axios.create({ baseURL: address.baseURL, timeout: 1000 * 5, // 請求超時時間 headers: {}})// 請求攔截this._axios.interceptors.request.use( config => {const requestHeader = { ’X-Requested-With’: ’XMLHttpRequest’, ’Content-Type’: ’application/json; charset=UTF-8’, ’Access-Control-Allow-Origin’: ’*’, token: getToken() // 請求頭統一添加token}config.headers = Object.assign(config.headers, requestHeader)return config }, error => {Promise.reject(error) }) } // 根據請求方式,判斷參數是放在query中還是body中。 // 最直觀的區別,比如GET請求把參數包含在url中,而POST則通過request body把參數放置在body體中,所以在提交時的參數形式是有區別的 // 以下列了四種我一般常用請求方式的參數形式,大家可以自行調整 /** * 發送get請求 * @param {String} url地址 * @param {Object} query 查詢參數 * @return json數據 */ get (url, query = {}) {return this._request(’get’)(url, { ...query}) } /** * 發送post請求 * @param {String} url地址 * @param {Object} body 查詢參數 * @return json數據 */ post(url, body = {}, headers) {let data;if(this.isFormData(body)) { data = body} else if(Array.isArray(body)) { data = body} else { data = { ...body }}return this._request(’post’)(url, headers)(url, data); } put (url, body = {}) {return this._request(’put’)(url, { ...body}); } delete(url, body = {}) {return this._request(’delete’)(url, { ...body}); }​ isFormData = v => {return Object.prototype.toString.call(v) === ’[object FormData]’ }​​ /** * 設置請求頭 * @param {Object} header 請求頭 */ setHeaders (header) {Object.keys(header).forEach(key => { this._axios.defaults.headers[key] = header[key]}) }​ // 處理請求頭 headers handleHeaders () {const headers = {}headers[’XMIME-TYPE’] = ’3’Headers[’Content-Type’] = ’application/json; charset=UTF-8’return headers }​ /** * 發送請求 * @param {String} method 請求方法類型 * @param headers * @returns {function(*=, *=):Promise<unknown>} * @private */ _request (method, headers) {this.setHeaders(this.handleHeaders()) // 設置統一的請求頭if (headers) { this.setHeaders(headers) // 自定義請求頭} return (url, data, timeout) => { const config = {url,method,timeout: timeout || this._axios.defaults.timeout } // 構造請求 config​ // 判斷請求類型 get post const paramType = [’get’, ’delete’].indexOf(method) !== -1 ? ’params’ : ’data’ config[paramType] = data //參數序列化 config.paramsSerializer = params => {return Qs.stringify(params, { arrayFormat: ’repeat’ }); } return new Promise((resolve, reject) => {// 發送真正的請求,驗證權限,檢查404等statusthis._axios .request(config) .then(response => {if (this.handleSuccessStatus(response.data.code, response.data)) { if (response.headers[’content-type’] !== ’text/plain; charset=urf-8’) { resolve( // 對響應結果二次包裝 Object.assign( { success: Number(response.data.code) === 200, data: response.data.data, msg: response.data.msg},  response.data )) // 處理返回結果 } else {resolve(response.data) }} }, response => {// 處理錯誤碼 if(response.response) { const statusCode = response.response.status this.handleErrorStatus(statusCode)} else { Vue.prototype.$message.error(response.message)}reject(response) }) .catch(err => {reject(err) })}) }} }​ // 請求成功,返回錯誤碼 // 具體狀態碼跟后臺開發人員統一,然后根據狀態碼進行相應提示 // 下面是我在項目中的操作,大家可自行調整擴展 handleSuccessStatus (code, data) {let result = ’’let flag = falseswitch (code) { case ’20007’:result = ’未查找到二次認證密碼!’flag = truebreak case ’20008’:result = ’您的二次認證密碼還未修改,請先修改!’flag = truebreak case ’20009’:result = ’您還未開啟二次認證,請聯系管理員!’flag = truebreak case ’90001’:result = ’請輸入二次認證密碼!’flag = truebreak case ’90002’:result = ’無操作權限!’flag = truebreak default:break}​// 進行通知// $message方法是我按需引入的element-ui中的提示組件,你可以替換成自己的提示組件if (result) { Vue.prototype.$message.error(result)}return flag } // 根據錯誤碼獲取錯誤提示 handleErrorStatus (statusCode) {let errorMsg = ’’if (statusCode === 500) { errorMsg = ’數據請求失敗,請聯系管理員!’} else if (statusCode === 404) { errorMsg = ’請求地址錯誤!’} else if (statusCode === 402) { errorMsg = ’當前您沒有權限操作該數據!’} else { errorMsg = ’請求出錯!’}// 進行通知Vue.prototype.$message.error(errorMsg) }}​export default new Request() 6、使用

我們在接口管理文件中,通過調用上面封裝的 request 類,傳入對應的參數即可。

user.api.js 文件:

import http from ’../services/request’​/** * @description 獲取用戶列表 * @param {*} params 請求接口的參數 */// 此處定義的reqUserList方法會調用我們封裝的request中的get方法,get方法的第一個參數是請求地址,第二參數是query參數export const reqUserList = params => http.get(’/user/list’, params) 

在調用的 .vue 文件中,引入該方法并傳入參數即可

import { reqUserList } from ’@Apis/user.api’ // 導入api​export default { name: ’UserList’, ... ... created() { }, methods: {async getUsers() { // 調用api接口,并傳入參數 const res = await reqUserList({page: 1,size: 10 }) console.log(res) // 獲取的響應結果} }}

如此,就完成了對接口的封裝及基本使用。

PS:以上這些文件名、文件夾名、方法名、路徑等都是我自己取得,你可以按照自己的代碼風格習慣進行調整。

以上就是如何在Vue項目中使用axios請求的詳細內容,更多關于Vue項目中使用axios的資料請關注好吧啦網其它相關文章!

標簽: IOS
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩av在线播放中文字幕| 亚洲a一区二区三区| 精品日韩毛片| 婷婷综合社区| 亚洲狼人精品一区二区三区| 亚洲综合国产| 91成人在线| 成人精品国产亚洲| 日韩精品永久网址| 黄色亚洲在线| 亚洲欧美在线综合| 国产精品免费不| 亚洲免费在线| 久久人人精品| 国产精品毛片| 久久久久久一区二区| 石原莉奈在线亚洲二区| 日韩1区在线| 亚洲欧洲一区| 欧美国产中文高清| 亚洲免费观看高清完整版在线观| 麻豆国产一区| 亚洲精品网址| 国产精品qvod| 久热精品在线| 成人在线视频中文字幕| 日韩在线精品| 国产欧美二区| 国产精品婷婷| 国产在线视频欧美一区| 国产精品久久久免费| 国产一区二区三区不卡视频网站 | 国产精品多人| 久久av网站| 99视频一区| 激情久久一区二区| 六月天综合网| 九色porny丨国产首页在线| 国产精区一区二区| 日韩精品视频一区二区三区| 亚洲精品乱码日韩| 国产日韩一区二区三区在线播放| 91国语精品自产拍| 亚洲精品**中文毛片| 国产欧美日韩影院| 久久久9色精品国产一区二区三区| 亚洲一区二区日韩| 日韩在线一二三区| 亚洲天堂成人| 91视频一区| 欧美日韩国产在线一区| 日本在线视频一区二区| 国产麻豆精品| 激情综合激情| 在线观看亚洲精品福利片| 91成人精品在线| 日韩综合一区| 亚洲一区区二区| 精品久久久网| 蜜臀久久99精品久久久画质超高清| 麻豆一区二区三区| а√在线中文在线新版| 红杏一区二区三区| 国产精品久久乐| 日本美女一区| 免费日韩视频| 欧美日韩在线二区| 国产精品美女久久久久久不卡 | 国产高清久久| 亚洲欧美日韩在线观看a三区 | 一区二区不卡| 97久久中文字幕| 美女视频黄 久久| 国产日韩在线观看视频| 国产在线观看www| 欧美网站在线| 超碰在线99| 日韩精品一区二区三区免费观影| 久久精品导航| 九九久久国产| 日韩精品欧美激情一区二区| 久久国产欧美| 国产二区精品| 黑人精品一区| 日韩毛片网站| 不卡一区2区| 欧美成人精品一级| 中文字幕乱码亚洲无线精品一区| 久久精品国产在热久久| 7777精品| 99日韩精品| 日韩黄色大片| 久久字幕精品一区| 婷婷成人av| 亚洲黄色在线| 亚洲香蕉网站| 岛国av在线播放| 国产精品久久久久久久久久久久久久久 | 亚洲高清激情| 视频一区在线播放| 大香伊人久久精品一区二区| 99久久久久国产精品| 麻豆视频久久| 国产欧美一区| 日韩精品福利一区二区三区| 91九色精品国产一区二区| 日韩成人综合| 成人一二三区| 国产一区二区三区网| 日韩成人在线看| 亚洲97av| 综合国产精品| 中文字幕亚洲影视| 亚洲另类视频| 亚洲欧美久久精品| 亚洲精品高潮| 午夜亚洲福利| 日韩一区二区三区免费视频| 美女尤物久久精品| 免费人成在线不卡| 伊人久久亚洲| 日韩欧美中文字幕在线视频| 亚洲精品伊人| 亚洲精品欧美| 日韩精品高清不卡| 日韩高清一区在线| 91精品国产经典在线观看| 国产视频一区二区在线播放| 国产精品一区二区三区www| 乱一区二区av| 精品美女视频 | 久久尤物视频| 福利欧美精品在线| 日韩精品麻豆| 亚洲午夜一级| 久久性天堂网| 人人精品久久| 国产欧美日韩在线一区二区 | 午夜久久tv| 红桃视频国产一区| 蜜臀va亚洲va欧美va天堂| 亚洲精品影视| 欧美亚洲tv| 老司机免费视频一区二区| 精品国产aⅴ| 日韩在线观看不卡| 在线观看免费一区二区| 麻豆精品网站| 成人看片网站| 婷婷成人在线| 首页欧美精品中文字幕| 久久久久久久久久久妇女 | 亚洲高清二区| 亚洲欧洲美洲国产香蕉| 欧美日韩一区二区高清| 精品久久久久中文字幕小说| 日本韩国欧美超级黄在线观看| 亚洲国产成人精品女人| 日本综合视频| 97精品视频在线看| 欧美日韩精品一区二区视频| 视频一区在线视频| 麻豆精品视频在线| 久久蜜桃av| 日韩一区二区三免费高清在线观看 | 美女日韩在线中文字幕| 97久久亚洲| 日韩av福利| 免费观看在线色综合| 国产精品久久乐| 日韩精品影视| 日本视频一区二区| 精品捆绑调教一区二区三区| 蜜臀a∨国产成人精品| 国产精品a级| 999久久久国产精品| 日韩欧美美女在线观看| 水蜜桃久久夜色精品一区| 亚洲在线成人| 你懂的网址国产 欧美| 91精品国产成人观看| 日本成人精品| 精精国产xxxx视频在线野外| 蜜臀av国产精品久久久久| 麻豆免费精品视频| 性色av一区二区怡红| 麻豆免费精品视频| 男人天堂欧美日韩| 国产精品毛片一区二区在线看| 亚洲图片久久| 久久三级视频| 国产精品麻豆成人av电影艾秋| 亚洲精品va| 高清一区二区三区| 911亚洲精品| 国产一级一区二区| 91av亚洲| 里番精品3d一二三区| 国产亚洲一级| 日韩在线精品|