vue3使用axios

11 篇文章 2 订阅

在这里插入图片描述

概述

Axios 是一个基于 Promise 的现代化 HTTP 客户端,用于浏览器和 Node.js。它提供了许多强大的功能,使得在客户端和服务器之间发送 HTTP 请求变得更加简单和灵活。以下是 Axios 的一些主要特点和功能

  • 从浏览器创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 超时处理
  • 查询参数序列化支持嵌套项处理
  • 自动将请求体序列化为:
  • JSON (application/json)
  • Multipart / FormData (multipart/form-data)
  • URL encoded form (application/x-www-form-urlencoded)
  • 将 HTML Form 转换成 JSON 进行请求
  • 自动转换JSON数据
  • 获取浏览器和 node.js 的请求进度,并提供额外的信息(速度、剩余时间)
  • 为 node.js 设置带宽限制
  • 兼容符合规范的 FormData 和 Blob(包括 node.js)
  • 客户端支持防御XSRF

构建使用流程

1.安装 axios


 cnpm install axios -S //安装axios
 cnpm install qs  -S //可以不装 用来格式化参数

2.封装请求

src下新建文件夹httpindex.js文件

新建index.js文件

 import axios from 'axios'
 // import qs from "qs";//qs为序列化数据的js库
 
 //设置baseUrl
 axios.defaults.baseURL = process.env.NODE_ENV === "production" ? "https://xxxxx" : "/api";

 //设置请求头
 axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8";
 //设置超时
 axios.defaults.timeout = 10000;
 //请求拦截器
 axios.interceptors.request.use(
    config => {     
        // const token = store.state.token;        
        // token && (config.headers.Authorization = token);       
        return config;
    },
    error => {
        return Promise.reject(error);
    }
 );

 //响应拦截器
 axios.interceptors.response.use(
    response => {
        if (response.status == 200) {
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
    },
    error => {
        alert(`异常请求:${JSON.stringify(error.message)}`)
    }
 );
 
 //封装post/get请求
 export default {
    post(url, data) {
        return new Promise((resolve, reject) => {
            axios({
                    method: 'post',
                    url,
                    data,
                    //data: qs.stringify(data), //参数序列化
                })
                .then(res => {
                    resolve(res.data)
                })
                .catch(err => {
                    reject(err)
                });
        })
    },

    get(url, data) {
        return new Promise((resolve, reject) => {
            axios({
                    method: 'get',
                    url,
                    params: data,
                })
                .then(res => {
                    resolve(res.data)
                })
                .catch(err => {
                    reject(err)
                })
        })
    }
 };

3.挂载

main.js:文件中进行全局方法挂载

 const app = createApp(App);
 import axios from './http/index'
 app.config.globalProperties.$api = axios;
 app.use(axios)

4.配置代理

vue.config.js文件中

	module.exports = {
    // 部署应用时的基本 URL
    publicPath: process.env.NODE_ENV === "production" ? "./" : "/",
    // build时构建文件的目录 构建时传入 --no-clean 可关闭该行为
    outputDir: "dist",
    // build时放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录
    assetsDir: "home",
    // 指定生成的 index.html 的输出路径 (相对于 outputDir)。也可以是一个绝对路径。
    indexPath: "index.html",
    // 默认在生成的静态资源文件名中包含hash以控制缓存
    filenameHashing: true,
    // 问你是否使用eslint
    lintOnSave: false,
    devServer: {
        // open: true,    // 自动启动浏览器
        // https: true,
        proxy: {
            "/api": {
                target: "https://xxxx", // 正式
                changeOrigin: true,
                ws: true,
                pathRewrite: {
                    "^/api": "",
                },
            }
    },
};

5.使用

在vue文件中使用 proxy.$api传入请求路径与参数

	<template>
		<p @click="submit">点击</p>
	</template>

  <script>
	  import { ref, reactive,getCurrentInstance,toRefs } from "vue";
	  export default {
	  name: "home",
	  props: {},
	  setup() {
	     //获取当前组件的实例、上下文来操作router和vuex等。相当于this
	    const { proxy, ctx } = getCurrentInstance();
	    
	    let state = reactive({
	      active:-1,
	      nav:[
		      { name: "测试1", icon: "face" },
		      { name: "测试2", icon: "face" },
	    	]
	   	 })
	 	
	 	//点击发送请求
	    const submit = ()=> {
			 proxy.$api
	        .get("/services/getData", { id:'123' })
	        .then((res) => {
	          	console.log(res);
	         });
	   	}
	      
	    return {
	      ...toRefs(state),
			submit 
	    };
	  },
	};
  </script>

参考

https://www.npmjs.com/package/axios
https://www.npmjs.com/package/vue
axios

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是Vue3.0中使用Element Plus和Axios的封装示例: 1. 首先,安装Element Plus和Axios: ```bash npm install element-plus axios ``` 2. 在main.js中引入: ```javascript import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' import 'element-plus/lib/theme-chalk/index.css' import axios from 'axios' const app = createApp(App) app.use(ElementPlus) app.config.globalProperties.$axios = axios app.mount('#app') ``` 3. 封装Axios请求: ```javascript import axios from 'axios' // 创建axios实例 const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // api的base_url timeout: 5000, // 请求超时时间 headers: { 'Content-Type': 'application/json;charset=UTF-8', }, }) // request拦截器 service.interceptors.request.use( (config) => { // 在发送请求之前做些什么 return config }, (error) => { // 对请求错误做些什么 console.log(error) // for debug Promise.reject(error) } ) // response拦截器 service.interceptors.response.use( (response) => { // 对响应数据做点什么 const res = response.data if (res.code !== 0) { // 根据后端返回的错误码,做相应的处理 // ... return Promise.reject('error') } else { return res } }, (error) => { // 对响应错误做点什么 console.log('err' + error) // for debug // 根据后端返回的错误码,做相应的处理 // ... return Promise.reject(error) } ) export default service ``` 4. 在组件中使用: ```javascript import { reactive } from 'vue' import axios from '@/utils/request' export default { setup() { const state = reactive({ data: [], }) const fetchData = () => { axios.get('/api/data').then((res) => { state.data = res.data }) } return { state, fetchData, } } } ``` 以上是Vue3.0中使用Element Plus和Axios的封装示例。需要注意的是,Axios请求拦截器和响应拦截器中的错误处理部分需要根据实际情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@才华有限公司

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值