学习使用axios

简言

什么是axios?
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
它有以下特性:

  • 从浏览器中创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF

安装

npm install axios

配置

创建配置文件

安装好后,创建配置文件,在src下哪个文件夹都行,我放在了plugins下,你也可以新建一个文件存放axios。
在这里插入图片描述

基础配置

import axios from 'axios'


//  创建axios实例
const instance = axios.create({
  //  baseurl
  baseURL: 'https://api.example.com',
  timeout: 5000,
  //  请求头
  headers: {
    Authorization: '123'
  }
})

//  请求拦截
instance.interceptors.request.use((config: any) => {
  config.headers.Authorization = '123'
  return config
}, (err) => {
  return Promise.reject(err)
})

//  响应拦截
instance.interceptors.response.use((response) => {
  return response
}, (err) => {
  return Promise.reject(err)
})
export default instance

全局引入
在这里插入图片描述

使用

使用mock

可以使用mock来模拟数据请求的过程。vite生态有一个vite-plugin-mock插件,可以使用mockjs来模拟数据。

npm install mockjs vite-plugin-mock -D

创建mock和配置

创建mock文件夹,存放mock数据。
在这里插入图片描述
mock入口文件,index.ts示例:

import type { MockMethod } from 'vite-plugin-mock'

export default [{
  url: '/api/getUsers',
  method: 'get',
  response: () => {
    return {
      code: 200,
      message: 'ok',
      data: {
        'list|10': [
          {
            id: '@guid',
            name: '@cname',
            'age|20-30': 23,
            'job|1': ['前端工程师', '后端工程师', 'UI工程师', '需求工程师']
          }
        ],
        total: 10
      }
    }
  }
},
{
  url: '/api/login',
  method: 'post',
  response: () => {
    return {
      code: 200,
      message: 'ok',
      data: {
        name: 'zsk',
        info: {
          age: 18
        }
      }
    }
  }
}


] as MockMethod[]

vite配置文件内使用vite-plugin-mock插件,有proxy代理,可以不使用代理,因为是在项目同一个本地服务下模拟的请求:
在这里插入图片描述

页面使用axios请求

由于前面全局注册了axios,使用选项式时可直接使用axios,组合式时需要引入,注入和直接引入axios配置文件都行,我这里使用了注入。

<template>
  <div class="container">
    <a-button class="btn" @click="btnClick">点击请求数据</a-button>
  </div>
  <div>
    <div v-for="item of list">
      {{ item }}
    </div>
  </div>
</template>
<script lang="ts" setup>
import { reactive, toRefs, onBeforeMount, onMounted, ref, inject } from "vue";
import { useStore } from "@/store/index";
import type { Axios } from "axios";
const axios = inject("$axios") as Axios;

//  定义数据
const store = useStore();
store.setUserInfo({
  name: "zsk",
  info: "balabala...",
} as any);

//
const list = reactive([]) as any;
const btnClick = async () => {
  list.splice(0);
  const { data } = await axios.get("/api/getUsers");
  list.push(...data.list);
};
</script>
<style lang="less" scoped></style>

另外,简单改了下返回拦截配置,在配置那儿提前解构一层data。
在这里插入图片描述

效果:

在这里插入图片描述

结语

这里只是简单使用了下axios,在实际项目中你可能会更改请求头,以携带token,也可能会做些拦截,例如token失效后操作等。axios封装的get和post请求传参方式有多种形式,如想了解请到官网了解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ZSK6

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

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

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

打赏作者

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

抵扣说明:

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

余额充值