vue3+vite的axios的封装与全局使用

这篇具有很好参考价值的文章主要介绍了vue3+vite的axios的封装与全局使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.安装axios

使用npm 或 yarn 安装axios到项目中

// 使用pnpm 安装   pnpm install axios

// 使用npm 安装   npm install axios

// 使用yarn 安装  yarn add axios

axios是一个基于Promise的HTTP请求库,支持Promise API、可以拦截请求和响应、可以转换请求和响应数据、支持取消请求、可以自动转换JSON数据等。 

2.创建文件封装axios

在src同级目录下创建utils(工具)文件夹,创建axios.ts,代码如下:

因为是ts所以有时候会报红,是因为ts语法问题,给每个参或者函数添加类型就可以了。

import axios from 'axios'

// 在config.js文件中统一存放一些公共常量,方便之后维护

// import { baseURL } from './config.js'

const baseURL=""

// 添加请求拦截器,在发送请求之前做些什么

axios.interceptors.request.use(function (config) {

  // 显示loading

  if(localStorage.getItem("token")==null){

    // localStorage.setItem("token","")

  }

  return config

}, function (error) {

  // 请求错误时弹框提示,或做些其他事

  return Promise.reject(error)

})

// 添加响应拦截器

axios.interceptors.response.use(function (response) {

  // 对响应数据做点什么,允许在数据返回客户端前,修改响应的数据

  // 如果只需要返回体中数据,则如下,如果需要全部,则 return response 即可

  return response.data

}, function (error) {

  // 对响应错误做点什么

  return Promise.reject(error)

})

// 封装数据返回失败提示函数

function errorState (response) {

  // 隐藏loading

  // 如果http状态码正常,则直接返回数据

  if (response && (response.status === 200 || response.status === 304 || response.status === 400)) {

    // 如果不需要除了data之外的数据,可以直接 return response.data

    return response

  } else {

    alert('数据获取错误')

  }

}

// 封装数据返回成功提示函数---------------------------------------------------------------------------

function successState (res) {

  // 隐藏loading

  // 统一判断后端返回的错误码(错误码与后台协商而定)

//   if (res.data.code === '000000') {

    // alert('success')

    // return res

//   }

}

// 封装axios--------------------------------------------------------------------------------------

function $axios (method:unknown, url:unknown, params:unknown) {

  let httpDefault = {

    method: method,

    baseURL: baseURL,

    url: url,

    headers:{

        'Content-Type':'application/json',

        "Authorization":localStorage.getItem("token")

    },

    // `params` 是即将与请求一起发送的 URL 参数

    // `data` 是作为请求主体被发送的数据

    params: method === 'GET' || method === 'DELETE' ? params : null,

    data: method === 'POST' || method === 'PUT' ? params : null,

    timeout: 10000

  }

  // 注意**Promise**使用(Promise首字母大写)

  return new Promise((resolve, reject) => {

    axios(httpDefault)

      // 此处的.then属于axios

      .then((res) => {

        successState(res)

        resolve(res)

      }).catch((response) => {

        // errorState(response)

        reject(response)

      })

  })文章来源地址https://www.toymoban.com/news/detail-787539.html

}

// 输出函数getAxios、postAxios、putAxios、delectAxios,供其他文件调用----------------------

const getAxios=(url, params) => $axios('GET', url, params)

const postAxios=(url, params) => $axios('POST', url, params)

const putAxios=(url, params) => $axios('PUT', url, params)

const delectAxios=(url, params) => $axios('DELETE', url, params)

// 导出让外部使用

export default {

    getAxios,

    postAxios,

    putAxios ,

    delectAxios,

}

 

3.创建所有的接口文件api.ts

在src同级目录下创建api文件夹,创建api.ts,代码如下:

const API={

    // 后续其他的相关接口

    data:{

        // 获取所有正常的资源类型

        typeAll:"/api/v1/data/common/res/type/all",

    },

}

export default {

    API

}

4.main.ts文件引入使用

vue3不如vue2在原型上增加属性简单,推荐使用vue提供的provide / Inject去提供全局变量

import { createApp,provide } from 'vue'

import App from './App.vue'

import api from '@/api/api'

import axios from '@/utils/axios'

const app =createApp(App)

// 通过vue提供的provide / Inject去提供全局变量

app.provide('$api',api)

app.provide('$axios',axios)

app.mount('#app')

5.在需要发请求的页面引入使用就可以了

可以先打印出来看

import {inject } from 'vue'

const $axios=inject('$axios')

const $api=inject('$api')

console.log($axios);

console.log($api);

看见控制台打印出来 就可以放心使用了 

vite配置axios,vue,typescript

使用:比如点击按钮获取一些数据(在这之前肯定是要配置跨域问题的,下面代码可以直接简单配置跨域问题) 

在vite.config.ts

export default defineConfig({

  plugins: [vue()],

  resolve: {

    alias: {

      "@": path.resolve("./src") // 相对路径别名配置,使用 @ 代替 src

    }

  },

  server: {

    host: "127.0.0.1",

    // port:4000,//设置服务启动端口号,是一个可选项,不要设置为本机的端口号,可能会发生冲突

    open:true,//是否自动打开浏览器,可选项

    cors:true,//允许跨域。

    // 设置代理

    proxy: {

      // 将请求代理到另一个服务器

      '/api': {

        target: 'https://xxxxx.com/',//这是你要跨域请求的地址前缀

        changeOrigin: true,//开启跨域

        rewrite: path => path.replace(/^\/api/, ''),//去除前缀api

      }

    }

  }

})

需要发请求页面使用 

import {inject,reactive,ref } from 'vue'

const $axios :any=inject('$axios')

const $api:any=inject('$api')

let data = reactive()

const reqData=()=>{

  console.log("点击了按钮");

   $axios.postAxios($api.API.data.typeAll,{}).then((resp:any)=>{

    console.log(resp);

  })

到了这里,关于vue3+vite的axios的封装与全局使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vite4+Typescript+Vue3+Pinia 从零搭建(7) - request封装

    项目代码同步至码云 weiz-vue3-template 基于 axios 封装请求,支持多域名请求地址 utils 目录下新建 request 文件夹,并新建 index.ts 、 request.ts 和 status.ts 文件。 此时,eslint会报 switch 前面的空格错误,需要修改 .eslintrc.cjs 里的 indent ,修改后,错误消失。 src 目录下新建 api 文件夹,

    2024年02月04日
    浏览(92)
  • Vite4+Typescript+Vue3+Pinia 从零搭建(3) - vite配置

    项目代码同步至码云 weiz-vue3-template 关于vite的详细配置可查看 vite官方文档,本文简单介绍vite的常用配置。 项目初建后, vite.config.ts 的默认内容如下: 比如,修改 App.vue : 根目录下新建 .env 、 .env.development 、 .env.production 三个文件。 .env 文件内新增内容: .env.development 文件内

    2024年02月05日
    浏览(104)
  • Vue3创建项目(四)axios封装及接口配置

    项目结构:  目录  🍉🍉🍉index.ts  🍉🍉🍉 api.ts 看完需要预计花费10分钟。 请求拦截器与响应拦截器  阅读下面代码需先了解以下内容:         请求拦截器:     请求拦截器的作用是在请求发送前进行一些操作,例如在每个请求体里加上token,每次请求携带token传给

    2024年02月03日
    浏览(59)
  • 【Vue.js】Vue3全局配置Axios并解决跨域请求问题

    对于前后端分离项目,前端和后端端口不能重复,否则会导致前端或者后端服务起不来。例如前端访问地址为: http://localhost:8080/ ,后端访问地址为 http://localhost:8081/ 。后端写好Controller,当用Axios访问该接口时,将会报错: Access to XMLHttpRequest at \\\' http://localhost:8081/login \\\' from

    2024年02月05日
    浏览(81)
  • Vite4+Typescript+Vue3+Pinia 从零搭建(2) - ts配置

    项目代码同步至码云 weiz-vue3-template 关于tsconfig的配置字段可查看其他文档,如 typeScript tsconfig配置详解 文件修改如下: 修改文件如下: 新建文件夹 types ,用来存放类型定义。比如新建 index.d.ts : 后续也可以新增其他文件,比如 global.d.ts 存放全局定义, router.d.ts 存放路由定

    2024年02月05日
    浏览(87)
  • vue3【使用axios并封装axios请求】

    第一步:安装axios 第二步:编写请求文件 新建request.js 简单的axios封装,里面相关提示信息,自己可以引入element-plus去添加

    2024年02月04日
    浏览(64)
  • 1.vue3+vite开发中axios使用及跨域问题解决

    一、跨域问题解决  1.基于vite+vue3配置时,在vite.congig.js文件server项目中添加 proxy代理   文件名:vite.congig.js 2.axios封装时设置基本路径baseURL 二、provide/inject 实现axios 全区使用   在main.js中provide    app.provide(\\\'axios\\\', axios)   在组件内获取   import { inject } from \\\'vue\\\'   const axios = i

    2024年02月12日
    浏览(71)
  • 记:vite3+vue3+axios前端项目跨域问题解决【前端和服务器nginx配置】

    前言:什么是跨域,网上一搜一大把,所以这里直接跳过,直入主题。 处理方式:不通过后端处理跨域,通过前端+服务器nginx处理。 1.前端涉及处理跨域的必要配置(开发环境、生产环境):vite3、vue3、axios 2.服务器涉及处理跨域的配置(生产环境):nginx【主要用到其配置

    2024年02月01日
    浏览(61)
  • 使用vite框架封装vue3插件,发布到npm

    目录   一、vue环境搭建 1、创建App.vue 2、修改main.ts 3、修改vite.config.ts 二、插件配置 1、创建插件 2、开发调试 3、打包配置 4、package.json文件配置 5、执行打包命令 pnpm build 6、修改index.d.ts 目录   一、vue环境搭建 1、创建App.vue 2、修改main.ts 3、修改vite.config.ts 二、插件配置

    2024年01月17日
    浏览(49)
  • Vite+Typescript+Vue3学习笔记

    1.1、创建项目(yarn) 1.2、项目配置 1、配置vue文件识别 vite默认情况下不识别.vue后缀的文件,需在vite-env.d.ts配置下 2、Api选择 Vue3推荐使用Composition API,这里关闭Vue2的Option Api 1.3、常用依赖 1、@types/node ts需安装node的类型,否则使用node相关会提示找不到 2、auto-import 用于简化Vu

    2024年02月15日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包