axios拦截器 config_vue axios 拦截器

前言

项目中需要验证登录用户身份是否过期,是否有权限进行操作,所以需要根据后台返回不同的状态码进行判断。

第一次使用拦截器,文章中如有不对的地方还请各位大佬帮忙指正谢谢。

正文

axios的拦截器分为请求拦截器和响应拦截器两种。

我一般把拦截器写在main.js里。

mian.js//axios请求

import Axios from "axios";

Vue.prototype.$axios = Axios;

请求拦截器

axios.interceptors.request.use(

function (config) {

// 在发送请求之前做些什么,例如加入token

.......

return config;

},

function (error) {

// 对请求错误做些什么

return Promise.reject(error);

}

)

响应拦截器

axios.interceptors.response.use(

function (response) {

// 在接收响应做些什么,例如跳转到登录页

......

return response;

},

function (error) {

// 对响应错误做点什么

return Promise.reject(error);

}

)

这两种拦截器中我只用了响应拦截器,现在我就来说说我是如何使用的。

首先说明一下,这里的状态码不是status,而是后台包在data中的(无论是成功还是失败),返回409表示用户账户过期,退到登录页,返回302表示没有权限,返回-1则是系统错误(这些状态码不是Status)

// 拦截器,当返回状态码是409,踢出到登录页面,但所有请求都是异步的,如果在某个地方有多个请求,拦截器就会拦截多遍,弹框也会弹多次,用户体验差,

// 所以当第一次拦截成功后,后面就不需要拦截,所以在这写了个操作,

// 操作:如果第一次拦截成功,在sessionStorage中存储个标识,然后下次拦截进来时判断有没有这个标识,如果有,则不进行拦截操作,当没有拦截时将这个标识从sessionStorage中删除

Axios.interceptors.response.use(

// 成功

function(response) {

// 返回

// return response;

// alert(response.status) //成功的Status

if (response.data.code == "409"){

var kickOut = sessionStorage.getItem("kickOut");

if (kickOut == "1") {

return;

}

sessionStorage.setItem("kickOut", "1");

router.push("/");

ElementUI.MessageBox(

"账号已经在其他地方登录,请重新登录!",

"警告",

{

confirmButtonText: "确定"

}

)

} else if(response.data.code == "302"){

ElementUI.Message({

message: ‘没有权限!‘,

type:‘warning‘

});

}else {

sessionStorage.removeItem("kickOut");

return response;

}

},

// 失败

function(error) {

// alert(error.response.status) //失败的Status

if (error.response.data.code == "409") {

...... //和成功中的一样,可以封装成一个函数在这调用

}else if(error.response.data.code == "-1"){

ElementUI.Message({

message: ‘系统错误!‘,

type:‘warning‘

})

}

}

);

链接:

后台返回的status状态码302拦截不到  查看原因

mian.js中使用Elenent-ui    查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中使用Axios拦截器可以在发送请求或响应返回前对其进行一些处理。拦截器可以用来添加公共headers、设置loading状态、处理错误等。 首先,你需要安装并导入Axios库。然后在Vue组件中定义拦截器。以下是一个简单的示例: ```javascript // main.js import axios from 'axios'; axios.interceptors.request.use( config => { // 在请求发送前做一些处理,比如添加headers config.headers['Authorization'] = 'Bearer token'; return config; }, error => { // 处理请求错误 return Promise.reject(error); } ); axios.interceptors.response.use( response => { // 在响应返回前做一些处理,比如解析数据 return response; }, error => { // 处理响应错误 return Promise.reject(error); } ); // Vue组件中使用Axios export default { data() { return { responseData: null, loading: false }; }, methods: { fetchData() { this.loading = true; axios.get('/api/data') .then(response => { this.responseData = response.data; this.loading = false; }) .catch(error => { console.error(error); this.loading = false; }); } } }; ``` 在上面的示例中,我们定义了两个拦截器:一个用于请求发送前处理,一个用于响应返回前处理。在请求拦截器中,我们可以添加headers等信息;在响应拦截器中,我们可以对响应数据进行处理。 同时,在Vue组件中使用Axios发送请求时,我们可以通过`then`和`catch`方法来处理响应和错误。在这个示例中,我们设置了一个`loading`状态来展示加载状态,当请求成功后,将返回的数据保存在`responseData`中。 这只是一个简单的示例,你可以根据自己的需求来进行更复杂的处理。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值