axios的使用

1.首先引入axios

csharp 复制代码
 yarn add axios

2.然后axios最常见的用法axios.create()

首先是创建一个axios的实例,加上默认配置
javascript 复制代码
import axios from "axios";

const http = axios.create({
    // 设置请求的根路径
    baseURL: '/api',
    // 设置超时时间
    timeout: 5000,
    // 设置请求头
    headers: {}
})

3.可以在public下面新建json目录然后 任意文件名.json

然后按照json的格式随便写一点数据

4.将axios.create里的baseUrl的根路径指向项目的[http://localhost:(你的端口](https://link.juejin.cn?target=http%3A%2F%2Flocalhost%3A(%25E4%25BD%25A0%25E7%259A%2584%25E7%25AB%25AF%25E5%258F%25A3 "http://localhost:(%E4%BD%A0%E7%9A%84%E7%AB%AF%E5%8F%A3") 如 :5173)作为根路径

并且将http导出
javascript 复制代码
import axios from "axios";

const http = axios.create({
    // 设置请求的根路径
    baseURL: 'http://localhost:5173',
    // 设置超时时间
    timeout: 5000,
    // 设置请求头
    headers: {}
})


export default http

5.src -> 新建api目录 -> useDemoApi.ts

api目录用来分类请求 比如我的 useDemoApi.ts 是用来存放测试的api
第一种用法
javascript 复制代码
import http from "../utils/http";

export const useDemoApi = () => {

    const getDemo = () => {


        return http(
            {
                url: '/json/demo.json',
                method: 'get',
                params: {
                    id: 1
                }
            }
        )
    }


    return {
        getDemo
    }

}
在页面使用它
可以看到拿到了数据

第二种用法

在App.vue页面的使用不用更改
javascript 复制代码
import http from "../utils/http";

export const useDemoApi = () => {

    const getDemo = () => {
        return http.get(
            '/json/demo.json',
            {
                params: {
                    id: 1
                }
            }
        )
    }


    return {
        getDemo
    }

}
可以看到依然能拿到而且一模一样

具体的使用,看个人爱好以及团队的统一

6.你会发现打印的数据有很多层每次要去获取真实数据都需要.data.data才能拿到json的数据 这时候可以使用拦截器来处理

拦截器分为两种

一种是响应拦截器(顾名思义 他就是在请求成功后的时候可以对请求到的数据做一些操作)

例 响应拦截器(不做任何处理)

javascript 复制代码
import axios from "axios";

const http = axios.create({
    // 设置请求的根路径
    baseURL: 'http://localhost:5173',
    // 设置超时时间
    timeout: 5000,
    // 设置请求头
    headers: {}
})

// 响应拦截器
http.interceptors.response.use((res) => {
    return res
})


export default http
不做任何处理会发现拿到的数据是一模一样的
从这里我们可以直接在返回res的时候做一下处理res.data
javascript 复制代码
import axios from "axios";

const http = axios.create({
    // 设置请求的根路径
    baseURL: 'http://localhost:5173',
    // 设置超时时间
    timeout: 5000,
    // 设置请求头
    headers: {}
})

// 响应拦截器
http.interceptors.response.use((res) => {
    return res.data
})


export default http
你会发现数据少了一层data包裹的了(所以在这里返回的时候统一处理数据结构就可以了,比如解决包裹层级太多或者获取响应状态码做message提示之类的)
我们可以打印一下res

它包含了请求地址的一些响应配置

一种是请求拦截器(顾名思义 他就是在发起请求前对一些请求的配置做一些操作)

我们可以直接添加这个请求拦截器并且打印一下看看他是啥

javascript 复制代码
import axios from "axios";

const http = axios.create({
    // 设置请求的根路径
    baseURL: 'http://localhost:5173',
    // 设置超时时间
    timeout: 5000,
    // 设置请求头
    headers: {}
})

// 响应拦截器
http.interceptors.response.use((res) => {
    return res.data
})
// 请求拦截器
http.interceptors.request.use((config) => {
    console.log("请求拦截器",config)
    return config
})


export default http

你会看到这里面包含了本次请求的所有信息,基础的路径,请求头,参数啥都可以看到一般除去防抖节流的时候(意思就是防止用户多次点击发送请求造成堵塞)我们不做操作

从打印的响应拦截器的res和请求拦截的config可以得出结论

config是自己发送请求时的配置与参数 res是你获取的那个请求的响应参数
相关推荐
chi11302 分钟前
【无标题】
前端·javascript·python
IT_陈寒1 小时前
JavaScript实战技巧总结:深挖数组遍历的性能陷阱与实战解法
前端·人工智能·后端
步行cgn1 小时前
为什么既要 web.xml 又要 springmvc.xml?能不能只配一个?
xml·前端·hive
风骏时光牛马1 小时前
大模型综合能力评测:多维度性能与对齐效果对比
前端
winfredzhang1 小时前
从零手写一个毛玻璃风格的页面搭建台:单文件 HTML 实现组件放置、面板磁吸与图层管理
前端·html
葡萄城技术团队10 小时前
1000 人协同压测的环境瓶颈排查:CPU 争用与 Wi\-Fi
前端
excel11 小时前
Marked 与 Markdown 有什么区别?该怎么选?
前端
Da Da 泓11 小时前
五子棋 Web 端测试用例报告
前端·网络·websocket·网络协议·测试用例·项目
zxcvb15312 小时前
远程查看本地文档:一条轻量 Web 文件服务的工程化链路
前端·远程查看文档
niucloud-admin12 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php