vue项目中怎么封装api请求

项目根路径 npm i axios 安装依赖

一 , src目录下新建utils文件夹 - > request.js文件

import axios from 'axios'
import {
    Toast
} from 'vant';
import qs from 'qs'
import router from '../router'

// 创建axios 实例
const service = axios.create({
    baseURL: '/GdYxEzs',  //请求根路径
    timeout: 10000, //超时时间,10秒
    loading: true,
})

//请求拦截器
service.interceptors.request.use(
    config => {
        if (config.method === "get") {
            config.data = {
                unused: 0
            }; // 这个是关键点,加入这行就可以解决get请求添加不上Content-Type
        }
        // 配置请求头
        if (config.url === "/a/login") {
            config.data = qs.stringify(config.data);
            config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
        } else {
            config.headers["Content-type"] = "application/json;charset=UTF-8";
        }
        return config;
    },
    error => {
        Promise.reject(error);
    }
);

//响应拦截器
service.interceptors.response.use(response => {
    // console.log(response);
    // 不做处理,请求成功直接返回
    // return response

    // 做处理,如果未登录强制跳到登录页面
    if (response.data.code === '0000') {
        return Promise.resolve(response)
    } else {
        if (response.data.code == '0001') {
            Toast('您还没有登陆噢~');
            setTimeout(() => {
                router.push('/login');
            }, 1500)
        } else {
            return Promise.resolve(response)
        }
    }
}, error => {
    // console.log(error); //打印错误
    // 请求超时 , 跳到无网络页面
    if (error.message.includes('timeout')) {
        Toast("请求超时,请检查网络后重试")
        router.push('/no_network');
    }
    return Promise.reject(error)
})

export default service

二 , src目录下新建api文件夹 - > index.js文件

//引入request
import request from '@/utils/request.js'

// 需要传参的
export const login = data => {
    return request({
        method: 'POST',
        url: '/v1_0/authorizations',
        data

    })
}

// 不需要传参的
export const getUserInfo = () => {
    return request({
        method: 'GET',
        url: `/v1_0/user`,
    })
}

三 , 需要发请求的vue文件中引入, 调用

import { getUserInfo } from "@/api/index.js";
  created() {
   //调用获取用户信息的方法
    this.loadUserInfo();
  },

  data() {
    return {
    // 定义用户信息的数组
      userInfo:[]
    };
  },

   methods: {
    // 定义获取用户信息的方法
    async loadUserInfo() {
      try {
    // 调用获取用户信息的api请求 , 并解构出data, 重命名为res
        const { data: res } = await getUserInfo();
        console.log(res);
     // 赋值
        this.userInfo= res.data;
      } catch (err) {
        console.log(err);
        
      }
    }
  
  },

这样发请求肯定会出现跨域 , 解决跨域 -->  vue 项目中怎么解决跨域 , has been blocked by CORS policy_调调啊的博客-CSDN博客_cors policy

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3进行API请求封装可以通过以下步骤实现: 1. 在src目录下创建一个api文件夹,用于存放API相关的文件。 2. 在api文件夹创建一个request.js文件,用于封装发送请求的函数。 3. 在request.js文件引入axios库,并创建一个名为request的函数,用于发送请求。可以参考引用\[3\]的代码。 4. 在需要发送请求的文件引入对应的API,并调用封装好的request函数发送请求。可以参考引用\[1\]的代码。 5. 在需要发送请求的地方调用封装好的API函数,并传递请求所需的参数。可以参考引用\[2\]的代码。 总结起来,Vue3API请求封装可以通过创建一个request.js文件,封装发送请求的函数,并在需要发送请求的地方引入对应的API并调用封装好的函数来实现。 #### 引用[.reference_title] - *1* *2* [VUE项目后端api请求封装V2.0](https://blog.csdn.net/m0_57945629/article/details/116946041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vue3封装axios请求](https://blog.csdn.net/XU441520/article/details/129579027)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值