前端必备知识-----添加token到请求拦截器中,响应拦截器中设置公共错误提示

在实际发送请求获取数据时,往往需要往请求头中加入特定的token值,以此来获取个性化数据

下面是代码演示

import axios from 'axios';
import { ElMessage } from 'element-plus'
import 'element-plus/theme-chalk/el-message.css'
import { useUserStore } from '@/stores/user';

// 创建axios实例
const http = axios.create({
  baseURL: '这里填配置请求的基地址',
  timeout: 5000
})

// 添加请求拦截器
http.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么

//在请求头中添加token值,来获取个性化数据
// 1. 从pinia获取token数据
const userStore = useUserStore()
// 2. 按照后端的要求拼接token数据
const token = userStore.userInfo.token
if (token) {
  config.headers.Authorization = `Bearer ${token}`
}


  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 添加响应拦截器
http.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response;
}, function (error) {
  // 对响应错误做点什么

  //针对所有发送的请求来做一个共有的错误提示
  ElMessage.warning(error.response.data.message || '网络请求失败,请稍后再试')

  return Promise.reject(error);
});

export default http;//默认导出

在 Vue.js ,使用 axios 作为 HTTP 客户端库时,如果需要在所有请求之前或之后添加一些通用操作,比如发送认证信息、处理错误等,可以设置全局的请求拦截器。下面是在 Vue 项目配置全局请求拦截器的步骤: 1. 首先,在你的 `src` 目录下创建一个名为 `api/index.js` 或类似文件,导入 Axios 和 Vue 实例。 ```javascript import axios from 'axios'; import { createApp } from 'vue'; const app = createApp(App); // 假设你已经有了 App 组件 // 创建 Axios 实例并配置全局拦截器 axios.defaults.headers.common['Content-Type'] = 'application/json'; // 设置默认请求头 app.config.globalProperties.$http = axios; // 将 Axios 对象挂载到 Vue 实例上,供组件访问 // 全局请求拦截器 axios.interceptors.request.use((config) => { // 在这里添加请求前的操作,如添加 token 或者校验登录状态 console.log('Request Interceptor:', config); return config; }, (error) => { // 请求失败时的处理 console.error('Error in Request Interceptor:', error); return Promise.reject(error); }); // 全局响应拦截器 axios.interceptors.response.use( (response) => { // 成功响应的处理 console.log('Response Interceptor:', response.data); return response.data; }, (error) => { // 错误响应的处理 console.error('Error in Response Interceptor:', error.response); if (error.response.status === 401) { // 如果是未授权,可以在这里触发重定向或提示用户重新登录 // handleUnauthorized(error); } return Promise.reject(error); } ); export default axios; ``` 然后在你的 Vue 组件就可以通过 `$http` 来发起请求了,例如: ```javascript export default { data() { return { message: '', }; }, methods: { fetchData() { this.$http.get('/api/data') .then(response => { // 使用响应数据 console.log(response); }) .catch(error => { this.message = 'An error occurred!'; }); }, }, }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值