日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > vue >内容正文

vue

ios 请求失败封装_vue_axios请求封装、异常拦截统一处理

發(fā)布時(shí)間:2025/3/8 vue 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios 请求失败封装_vue_axios请求封装、异常拦截统一处理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、前端網(wǎng)絡(luò)請(qǐng)求封裝、異常統(tǒng)一處理

vue中采用axios處理網(wǎng)絡(luò)請(qǐng)求,避免請(qǐng)求接口重復(fù)代碼,以及各種網(wǎng)絡(luò)情況造成的異常情況的判斷,采用axios請(qǐng)求封裝和異常攔截操作;

axios 請(qǐng)求封裝

// 引入axios文件包

import axios from 'axios'

// POST 方法封裝 (參數(shù)處理)

export const postRequest = (url, params) => {

return axios({

method: 'post',

url: url,

data: params,

transformRequest: [function (data) {

let ret = ''

for (let it in data) {

ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'

}

return ret

}],

headers: {

'Content-Type': 'application/x-www-form-urlencoded'

}

});

}

// POST 方法封裝 (文件上傳)

export const uploadFileRequest = (url, params) => {

return axios({

method: 'post',

url: url,

data: params,

headers: {

'Content-Type': 'multipart/form-data'

}

});

}

// GET 方法封裝

export const getRequest = (url) => {

return axios({

method: 'get',

url: url

});

}

// PUT 方法封裝

export const putRequest = (url, params) => {

return axios({

method: 'put',

url: url,

data: params,

transformRequest: [function (data) {

let ret = ''

for (let it in data) {

ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'

}

return ret

}],

headers: {

'Content-Type': 'application/x-www-form-urlencoded'

}

});

}

// DELETE 方法封裝

export const deleteRequest = (url) => {

return axios({

method: 'delete',

url: url

});

}

2)axios請(qǐng)求異常統(tǒng)一處理

// 引入依賴(lài)包

import axios from 'axios'

import {Message} from 'element-ui'

// REQUEST 請(qǐng)求異常攔截

axios.interceptors.request.use(config=> {

//========== 所有請(qǐng)求之前都要執(zhí)行的操作 ==============

return config;

}, err=> {

//================== 錯(cuò)誤處理 ====================

Message.error({message: '請(qǐng)求超時(shí)!'});

return Promise.resolve(err);

})

// RESPONSE 響應(yīng)異常攔截

axios.interceptors.response.use(data=> {

//============== 所有請(qǐng)求完成后都要執(zhí)行的操作 ==================

// 第一種方式

// 根據(jù)返回的code值來(lái)做不同的處理(和后端約定)

switch (data.code) {

case '0':

// exp: 修復(fù)iPhone 6+ 微信點(diǎn)擊返回出現(xiàn)頁(yè)面空白的問(wèn)題

if (isIOS()) {

// 異步以保證數(shù)據(jù)已渲染到頁(yè)面上

setTimeout(() => {

// 通過(guò)滾動(dòng)強(qiáng)制瀏覽器進(jìn)行頁(yè)面重繪

document.body.scrollTop += 1

}, 0)

}

// 這一步保證數(shù)據(jù)返回,如果沒(méi)有return則會(huì)走接下來(lái)的代碼,不是未登錄就是報(bào)錯(cuò)

return data

// 需要重新登錄

case 'SHIRO_E5001':

// 微信生產(chǎn)環(huán)境下授權(quán)登錄

if (isWeChat() && IS_PRODUCTION) {

axios.get(apis.common.wechat.authorizeUrl).then(({ result }) => {

location.replace(global.decodeURIComponent(result))

})

} else {

// 否則跳轉(zhuǎn)到h5登錄并帶上跳轉(zhuǎn)路由

const search = encodeSearchParams({

next: location.href,

})

location.replace(`/user/login`)

}

// 不顯示提示消息

data.description = ''

break

default:

}

// 若不是正確的返回code,且已經(jīng)登錄,就拋出錯(cuò)誤

const err = new Error(data.description)

err.data = data

err.response = response

// 第二種方式,僅對(duì)200和error狀態(tài)處理

if (data.status && data.status == 200 && data.data.status == 'error') {

Message.error({message: data.data.msg});

return;

}

return data;

}, err=> {

//============== 錯(cuò)誤處理 ====================

if (err && err.response) {

switch (err.response.status) {

case 400: err.message = '請(qǐng)求錯(cuò)誤(400)'; break;

case 401: err.message = '未授權(quán),請(qǐng)重新登錄(401)'; break;

case 403: err.message = '拒絕訪(fǎng)問(wèn)(403)'; break;

case 404: err.message = '請(qǐng)求出錯(cuò)(404)'; break;

case 408: err.message = '請(qǐng)求超時(shí)(408)'; break;

case 500: err.message = '服務(wù)器錯(cuò)誤(500)'; break;

case 501: err.message = '服務(wù)未實(shí)現(xiàn)(501)'; break;

case 502: err.message = '網(wǎng)絡(luò)錯(cuò)誤(502)'; break;

case 503: err.message = '服務(wù)不可用(503)'; break;

case 504: err.message = '網(wǎng)絡(luò)超時(shí)(504)'; break;

case 505: err.message = 'HTTP版本不受支持(505)'; break;

default: err.message = `連接出錯(cuò)(${err.response.status})!`;

}

} else {

err.message = '連接服務(wù)器失敗!'

}

Message.err( {message: err.message } )

return Promise.resolve(err);

})

請(qǐng)求出錯(cuò)的時(shí)候我執(zhí)行的是:Promise.resolve(err);,而不是Promise.reject(err);,這樣無(wú)論請(qǐng)求成功還是失敗,在成功的回調(diào)中都能收到通知

2、VUE 項(xiàng)目中使用該方法

1)在main.js中導(dǎo)入所有請(qǐng)求方法

// 導(dǎo)入所有請(qǐng)求方法

import {getRequest} from './utils/api'

import {postRequest} from './utils/api'

import {deleteRequest} from './utils/api'

import {putRequest} from './utils/api'

2)將請(qǐng)求方法添加至 Vue.prototype 上

// 向VUE的原型上添加請(qǐng)求方法

Vue.prototype.getRequest = getRequest;

Vue.prototype.postRequest = postRequest;

Vue.prototype.deleteRequest = deleteRequest;

Vue.prototype.putRequest = putRequest;

3)發(fā)送請(qǐng)求(請(qǐng)求方法的調(diào)用)

// 發(fā)送網(wǎng)絡(luò)請(qǐng)求

this.postRequest('/login', {userName,password}).then(resp=> {

...

}

});

4)案例

import Vue from 'vue'

import cypressIndex from '../components/rootVue/cypressIndex'

import ElementUI from 'element-ui';

import 'element-ui/lib/theme-chalk/index.css';

// axios請(qǐng)求的方法引入

import {getRequest} from '../components/utils/settings'

import {postRequest} from '../components/utils/settings'

Vue.use(ElementUI);

// 將axios方法添加到VUE原型上

Vue.prototype.getRequest = getRequest;

Vue.prototype.postRequest = postRequest;

Vue.config.productionTip = false

/* eslint-disable no-new */

new Vue({

el: '#cypressIndex',

render: h => h(cypressIndex)

})

總結(jié)

以上是生活随笔為你收集整理的ios 请求失败封装_vue_axios请求封装、异常拦截统一处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。