axios拦截器判断toke是否过期怎么做axios.interceptors.response.use( function (response) { const { status, data, code } = response as any; if (status === 200 || code === 200) { return data; } // todo 做一个异常处理 token 失效 返回到登录页面 }, function (error) { return Promise.reject(error); } );
时间: 2023-12-10 09:38:06 浏览: 161
在响应拦截器中,你可以判断返回的状态码是否为401,如果是的话,则说明token已经过期,需要重新登录。可以在拦截器中进行如下处理:
```javascript
axios.interceptors.response.use(
function(response) {
const { status, data, code } = response as any;
if (status === 200 || code === 200) {
return data;
}
// 判断是否为401,如果是,则说明token已经过期,需要重新登录
if (status === 401) {
// 这里可以做一些处理,比如清除本地存储的token等
// 跳转到登录页
window.location.href = '/login';
}
// 其他异常情况统一处理
return Promise.reject(response);
},
function(error) {
return Promise.reject(error);
}
);
```
在这个例子中,如果返回的状态码为401,则会跳转到登录页。你可以根据自己的需求进行修改。
相关问题
axios拦截器判断toke是否过期
可以使用axios的拦截器来判断token是否过期,具体实现如下:
```javascript
import axios from 'axios'
const instance = axios.create({
baseURL: 'http://api.example.com',
timeout: 5000
})
// 请求拦截器
instance.interceptors.request.use(
config => {
const token = localStorage.getItem('token')
if (token) {
// 如果token存在,则在请求头中添加token
config.headers.Authorization = `Bearer ${token}`
}
return config
},
error => {
return Promise.reject(error)
}
)
// 响应拦截器
instance.interceptors.response.use(
response => {
return response
},
error => {
const { response } = error
if (response) {
switch (response.status) {
case 401:
// 如果返回401错误,表示token过期或无效,跳转到登录页
localStorage.removeItem('token')
window.location.href = '/login'
break
// 其他错误处理
default:
// do something
break
}
}
return Promise.reject(error)
}
)
export default instance
```
在请求拦截器中,我们通过localStorage获取token,并在请求头中添加token,这样每次请求都会自动携带token。在响应拦截器中,如果返回401错误,即表示token过期或无效,我们清除localStorage中的token,并跳转到登录页。其他错误可以根据实际情况进行处理。
import axios from "axios"; // 创建实例 const instance = axios.create({ baseURL: "", timeout: 1000, // headers: {'X-Custom-Header': 'foobar'} }); // 添加请求拦截器 instance.interceptors.request.use( function (config) { // 在发送请求之前做些什么 return config; }, function (error) { // 对请求错误做些什么 return Promise.reject(error); } ); // 添加响应拦截器 instance.interceptors.response.use( function (response) { // 对响应数据做点什么 if (response.status === 200) { return response.data; } return response; }, function (error) { // 对响应错误做点什么 return Promise.reject(error); } ); export default instance;中的baseurl
在上述代码中,baseURL被设置为空字符串,这意味着实际请求时将不会添加任何前缀。这种情况适用于您的后端API和前端代码部署在同一域名下的情况。如果您的API和前端代码部署在不同的域名下,则应该将baseURL设置为API的URL,例如:
```javascript
const instance = axios.create({
baseURL: 'http://api.example.com',
timeout: 1000,
});
```
在上面的代码中,baseURL被设置为http://api.example.com。当您在发送请求时,实际的URL将被拼接在baseURL的后面。例如,如果您发送一个GET请求到/users路径,实际请求的URL将为http://api.example.com/users。
希望这能回答您的问题,如果您还有其他问题,请随时提出。
阅读全文