vue3 通用请求拦截axios(接口调用函数)

 

 调用接口的时候

  const documentPublishFn = async () => {
    showElLoading();
    let pam = {
      documentInfoId: currentData.value.id,
    };

    const [err, res] = await promiseToArr(documentPublishApi(pam));
    showElLoading(false);
    if (err) return ElMessage.error(err.message || '发布失败');
    return ElMessage.success(res.message || '发布成功');
  };

 login.js 文件

import $axios from './axios.js';

//登录
export const loginApi = (params) => {
  return $axios.post(`/ndm/login`, params);
};

 axios.js 文件

import Axios from 'axios';
import { ElMessage } from 'element-plus';
import store from '@/store/index';

const baseURL = import.meta.env.VITE_BASEURL;
const axios = Axios.create({
  baseURL,
  timeout: 20000, // 请求超时 20s
});

// 前置拦截器(发起请求之前的拦截)
axios.interceptors.request.use(
  (config) => {
    config.headers['token'] = store.state.token;
    return config;
  },
  (error) => {
    return Promise.reject(error);
  },
);

// 后置拦截器(获取到响应时的拦截)
axios.interceptors.response.use(
  (response) => {
    /**
     * 根据你的项目实际情况来对 response 和 error 做处理
     * 这里对 response 和 error 不做任何处理,直接返回
     */
    const { headers, data } = response;
    const { code } = response.data;
    const contentType = headers['content-type'];
    if (contentType.includes('force-download')) {
      let obj = {
        code: 200,
        data: { headers, data },
        message: '',
      };
      return obj;
    }

    if (code === 200) {
      return response.data;
    } else {
      return Promise.reject(response.data);
    }
  },
  (error) => {
    if (error.response && error.response.data) {
      const code = error.response.status;
      const msg = error.response.data.message;
      ElMessage.error(`Code: ${code}, Message: ${msg}`);
      console.error(`[Axios Error]`, error.response);
    } else {
      ElMessage.error(`${error}`);
    }
    return Promise.reject(error);
  },
);

export default axios;

上面用到的工具点击进入工具函数icon-default.png?t=M85Bhttps://blog.csdn.net/qq_39523111/article/details/128440321

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue2封装Axios接口请求的二次封装可以让我们在项目中更加方便地使用Axios进行数据请求,同时也可以提高代码的可维护性和复用性。下面是一个简单的Vue2封装Axios接口请求的示例: 1. 安装Axios 在项目中安装Axios,可以使用npm或者yarn进行安装: ```bash npm install axios --save ``` 或者 ```bash yarn add axios ``` 2. 封装Axios 在src目录下新建一个api文件夹,用于存放Axios的封装代码。在api目录下新建一个request.js文件,用于封装Axios请求方法。 ```javascript import axios from 'axios' // 创建实例 const service = axios.create({ baseURL: process.env.BASE_URL, // 接口的基础路径 timeout: 5000 // 请求超时时间 }) // 请求拦截器 service.interceptors.request.use( config => { // 在请求发送之前做一些处理,比如添加token等 return config }, error => { // 请求错误时做些事 return Promise.reject(error) } ) // 响应拦截器 service.interceptors.response.use( response => { // 对响应数据做一些处理,比如说判断返回的状态码是否正确等 return response.data }, error => { // 响应错误时做些事 return Promise.reject(error) } ) export default service ``` 在上面的代码中,我们使用了Axios的interceptors来拦截请求和响应,并做一些处理。比如说,在请求拦截器中,我们可以在发送请求之前添加token等信息;在响应拦截器中,我们可以对返回的数据进行处理,判断响应状态码是否正确等。 3. 封装API请求 在api目录下新建一个index.js文件,用于封装API请求的方法。我们可以根据实际的业务需求,封装不同的请求方法。 ```javascript import request from './request' export function getUsers () { return request({ url: '/users', method: 'get' }) } export function getUserById (id) { return request({ url: `/users/${id}`, method: 'get' }) } export function createUser (data) { return request({ url: '/users', method: 'post', data }) } // 其他API请求方法... ``` 在上面的代码中,我们使用了封装的request方法来发送请求,同时根据业务需求,定义了不同的请求方法,比如获取用户列表、根据ID获取用户信息、创建用户等。 4. 使用API请求Vue组件中使用API请求非常简单,只需要在组件中引入封装的API请求,然后调用对应的方法即可。 ```javascript import { getUsers } from '@/api' export default { mounted () { this.getUsers() }, methods: { async getUsers () { const { data } = await getUsers() console.log(data) } } } ``` 在上面的代码中,我们在组件中引入了封装的getUsers方法,并在mounted钩子函数中调用该方法来获取用户列表,并将返回的数据打印到控制台上。 这样,我们就完成了Vue2封装Axios接口请求的二次封装。通过对Axios进行二次封装,我们可以更加方便地使用Axios进行数据请求,并且也可以提高代码的可维护性和复用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值