vue拦截器的作用是什么,如何实现拦截
时间: 2024-03-19 17:45:34 浏览: 175
Vue拦截器的作用是在请求发送或响应返回时对数据进行预处理或过滤,可以在拦截器中添加请求头、对请求数据进行处理、对响应数据进行处理等操作。拦截器可以在请求或响应被发送或返回之前拦截它们,对它们进行修改或处理,然后再继续执行。
在Vue中,可以使用axios库来实现拦截器。axios提供了interceptors属性,其中包含request和response两个对象,分别表示请求和响应拦截器。可以通过axios.interceptors.request.use和axios.interceptors.response.use方法来添加拦截器。
例如,以下代码实现了一个请求拦截器,用于在每个请求中添加token请求头:
```
axios.interceptors.request.use(
config => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
error => {
return Promise.reject(error);
}
);
```
以上代码中,axios.interceptors.request.use方法用于添加请求拦截器,并在其中实现了添加token请求头的功能。如果请求出现错误,则使用Promise.reject方法抛出错误信息。
相关问题
vue拦截器
Vue拦截器可以用来拦截请求和响应,对其进行统一处理或者添加一些额外的逻辑。在Vue中,可以通过使用Axios拦截器来实现。Axios是一个流行的HTTP客户端,可以在浏览器和Node.js中使用。Axios拦截器有两种类型:请求拦截器和响应拦截器。
请求拦截器可以用来在发送请求前进行一些处理,比如添加请求头、设置请求超时时间、添加loading等。响应拦截器可以用来在接收到响应后进行一些处理,比如统一处理错误、处理返回数据等。
以下是一个使用Axios拦截器的示例:
```
import axios from 'axios'
// 创建axios实例
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // api的base_url
timeout: 5000 // 请求超时时间
})
// request拦截器
service.interceptors.request.use(
config => {
// 在发送请求之前做些什么
config.headers['Authorization'] = 'Bearer ' + getToken()
return config
},
error => {
// 处理请求错误
console.log(error) // for debug
Promise.reject(error)
}
)
// response拦截器
service.interceptors.response.use(
response => {
// 对响应数据进行处理
const res = response.data
if (res.code !== 20000) {
// 处理错误
return Promise.reject('error')
} else {
return res
}
},
error => {
// 处理响应错误
console.log('err' + error) // for debug
return Promise.reject(error)
}
)
export default service
```
在上面的代码中,我们创建了一个Axios实例,并使用拦截器对请求和响应进行了处理。在请求拦截器中,我们添加了Authorization请求头,并设置了请求超时时间。在响应拦截器中,我们对响应数据进行了处理,如果返回的code不为20000,则表示请求失败,否则返回res。
vue拦截器实现登陆管控
Vue拦截器可以用于实现登录管控,具体实现方式如下:
1. 定义路由拦截器:在路由跳转时,判断用户是否已经登录,如果未登录,则跳转到登录页面,否则继续访问目标页面。
```javascript
router.beforeEach((to, from, next) => {
const isLogin = sessionStorage.getItem('isLogin') || false;
if (to.meta.requireAuth) {
// 判断用户是否已登录
if (isLogin) {
next();
} else {
// 跳转到登录页面
next({
path: '/login',
query: { redirect: to.fullPath }
});
}
} else {
next();
}
});
```
2. 在登录时,设置登录状态:将用户登录状态保存在sessionStorage中。
```javascript
// 登录操作
login() {
// 向后台发送登录请求
axios.post('/api/login', {
username: this.username,
password: this.password
}).then(res => {
// 登录成功,保存登录状态
sessionStorage.setItem('isLogin', true);
// 跳转到首页
this.$router.push({ path: '/' });
}).catch(err => {
console.log(err);
});
}
```
这样,当用户未登录时,访问需要登录的页面时会自动跳转到登录页面,登录成功后再跳转回目标页面。
阅读全文