IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue——axios的二次封装 -> 正文阅读

[JavaScript知识库]Vue——axios的二次封装

文章目录

  • 四、总结四、总结

    一、请求和传递参数
    在 Vue 中,发送请求一般在 created 钩子中,当然放在 mounted 钩子中也没问题。

    以下请求的前提都是安装了 axios,并且 import axios from 'axios' 成功导入

    Axios官网链接

    1、get 请求
    get 请求传参,在地址里面通过 ?xxx=123 的形式
    ? // Vue 环境中
    ? async created() {
    ? ? let res = await axios.get(
    ? ? ? "http://testapi.xuexiluxian.cn/api/slider/getSliders?xxx=123"
    ? ? );
    ? ? console.log(res);
    ? }

    2、post 请求
    post 请求传参,在第二个参数里面传递
    ? // Vue 环境中
    ? async created() {
    ? ? let res = await axios.post('http://testapi.xuexiluxian.cn/api/course/mostNew', {
    ? ? ? pageNum: 1,
    ? ? ? pageSize: 5
    ? ? })
    ? ? console.log(res);
    ? }

    3、axios 请求配置
    请求配置里面可以设置很多属性
    ? // Vue环境中
    ? async created() {
    ? ? let res = await axios({
    ? ? ? url: 'http://testapi.xuexiluxian.cn/api/course/mostNew',
    ? ? ? method: 'post', // 默认是 get 请求
    ? ? ? headers: {}, // 自定义请求头
    ? ? ? data: { ?// post 请求,前端给后端传递的参数
    ? ? ? ? pageNum: 1,
    ? ? ? ? pageSize: 5
    ? ? ? },?
    ? ? ? params: {}, // get 请求,前端给后端传递的参数
    ? ? ? timeout: 0, // 请求超时
    ? ? ? responseType: 'json' // 返回的数据类型
    ? ? })
    ? console.log(res);
    ? }


    二、axios 的二次封装
    目的:方便统一管理

    注意:先安装 axios 才可以使用,终端键入:npm i axios,之后回车安装它

    1、配置拦截器
    在 src 目录下新建 utils 文件夹,该文件夹下创建 request.js 文件

    request.js 文件

    首先创建 axios 对象
    添加请求拦截器(前端给后端的参数)
    添加响应拦截器(后端给前端的数据)
    import axios from 'axios'

    // 创建 axios 对象
    const instance = axios.create({
    ? ? baseURL: 'http://testapi.xuexiluxian.cn/api', // 根路径
    ? ? timeout: 2000 // 网络延时
    })

    // 添加请求拦截器 => 前端给后端的参数【还没到后端响应】
    instance.interceptors.request.use(function (config) {
    ? ? // 在发送请求之前做些什么
    ? ? return config;
    }, function (error) {
    ? ? // 对请求错误做些什么
    ? ? return Promise.reject(error);
    });

    // 添加响应拦截器 => 后端给前端的数据【后端返回给前端的东西】
    instance.interceptors.response.use(function (response) {
    ? ? // 对响应数据做点什么
    ? ? return response;
    }, function (error) {
    ? ? // 对响应错误做点什么
    ? ? return Promise.reject(error);
    });

    // 最终返回的对象
    export default instance


    2、发送请求
    在需要发请求的组件中,导入 request.js, 之后发送请求即可

    App.vue 组件

    在需要使用的组件中 导入 request
    直接发送请求即可
    <template>
    ? <div id="app">前端杂货铺</div>
    </template>

    <script>
    import request from "./utils/request";
    export default {
    ? name: "App",
    ? data() {
    ? ? return {};
    ? },
    ? created() {
    ? ?? ?// get 请求
    ? ? request({
    ? ? ? url: "/course/category/getSecondCategorys",
    ? ? }).then((res) => {
    ? ? ? console.log(res);
    ? ? });

    ?? ?// post 请求
    ? ? request({
    ? ? ? url: "/course/mostNew",
    ? ? ? method: "post",
    ? ? ? data: {
    ? ? ? ? pageNum: 1,
    ? ? ? ? pageSize: 5,
    ? ? ? },
    ? ? }).then((res) => {
    ? ? ? console.log(res);
    ? ? });
    ? }
    }
    </script>


    三、API 的解耦
    API 解耦的目的:

    为了同一个接口可以多次使用
    为了方便 api 请求统一管理
    1、配置文件对应的请求
    在 src 目录下新建 api 文件夹,该文件夹下创建 xxx.js 文件,配置对应请求

    ./api/course.js 文件

    发送与课程相关的请求
    import request from "../utils/request";

    // 获取一级分类(get请求)
    export function getSendCategorys() {
    ? ? return request({
    ? ? ? ? url: '/course/category/getSecondCategorys',
    ? ? })
    }

    // 查询课程(post请求)
    export function courseSearch(data) {
    ? ? return request({
    ? ? ? ? url: '/course/search',
    ? ? ? ? method: 'post',
    ? ? ? ? data
    ? ? })
    }


    2、获取请求的数据
    App.vue 组件

    从文件定义的请求中导入对应函数
    获取数据
    <template>
    ? <div id="app"></div>
    </template>

    <script>
    import { getSendCategorys, courseSearch } from "./api/course";
    export default {
    ? name: "App",
    ? data() {
    ? ? return {};
    ? },
    ? created() {
    ? ?? ?// 获取一级分类
    ? ? getSendCategorys().then((res) => {
    ? ? ? console.log(res);
    ? ? });
    ? ? // 查询课程(有参数的传递)
    ? ? courseSearch({
    ? ? ? pageNum: 1,
    ? ? ? pageSize: 5
    ? ? }).then((res) => {
    ? ? ? console.log(res);
    ? ? });
    ? }
    }
    ?


    文件结构如下:

    四、总结
    对 axios 的二次封装,在企业级项目中是 必须 要配置的。

    因为经过封装的 axios,更容易使用和管理,并且可以 减少代码量,让 逻辑更清晰
    ?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:06:34  更:2022-10-22 21:09:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 20:15:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码