vue3 axios

2023-05-16

Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。

简介

Axios 是一个用于浏览器和Node的基于承诺的简单HTTP客户端。它提供了一个易于使用的库,占地面积小。它还有一个可扩展的接口和一些伟大的功能,如JSON数据的自动转换,以及客户端支持对XSRF的保护,等等。

在服务器端(Node),它依赖于本地Node.js HTTP模块,而在客户端(浏览器),它使用XMLHttpRequests。由于是同构的,Axios是少数几个在浏览器和服务器端都可以毫不费力地使用的库之一。

如果我们对Axios进行常规要求,我们会收到默认的实例。假设我们想添加一个自定义的配置,比如一秒钟的超时,这在const axios = require(‘axios’) 中是不容易实现的?

这就是Axios.create与Axios的常规 "require "相比的优势所在,尽管两者都会返回Axios的实例。通过Axios.create,我们可以设置一个类似于baseUrl 的配置,所有的调用都只需要HTTP调用的URI,而不用完整的URL。

安装

npm

npm install axios

bower

bower install axios

yarn

yarn add axios

CDN

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

使用

Axios.create本质上是一个创建Axios新实例的工厂。用 Axios.create 来使用 Axios 可以用自定义配置来创建一个新的Axios实例。用Axios.create创建的带有自定义配置的Axios实例有助于我们在该实例的所有调用中重复使用所提供的配置。

axios.create(config) 对axios请求进行二次封装

  1. 根据指定配置创建一个新的 axios ,也就是每个axios 都有自己的配置
  2. 新的 axios 只是没有 取消请求 和 批量请求 的方法,其它所有语法和 axios 一致
  3. 为什么要这种语法?
    1. 需求,项目中有部分接口需要的配置与另一部分接口的配置不太一样
    2. 解决:创建2个新的 axios ,每个都有自己的配置,分别对应不同要求的接口请求中

1. src/utils/index.js

import axios from 'axios';

// 判断环境
const BASEURL = process.env.NODE_ENV === 'production' ? '' : '/devApi';
const service = axios.create({
  baseURL: BASEURL, 
  timeout: 1000, // 设置了在1000毫秒内请求数据 如果没有请求成功就执行错误函数
});
console.log(process.env.NODE_ENV, process.env.BASE_URL);

// 请求拦截:每一次发请求都要做的逻辑
service.interceptors.request.use(req => {
  // 每次请求都要作的逻辑
  return req;
}, function (error) {
  return Promise.reject(error)
});

// 响应拦截:每一次响应都要做的逻辑,在响应拦截中执行
service.interceptors.response.use(function (res) {
  // 每次响应都要做的逻辑
  // 统一打印数据
  console.group('本次请求地址是:' + res.config.url);
  console.log(res);
  console.groupEnd();
  return res;
}, function (error) {
  return Promise.reject(error);
});

export default service;

2. src/api/index.js

import service from '@/utils'

// 获取首页新闻
export function getSynew(params = {}) {
    return service.request({
        method: 'get',
        url: '/synew',
        params
        // params: params 左边的params是变量名(key)后台接收机的,右边的params是接收的参数
    })
}
// 可以简写为
// export function getSynew() {
//     return request.get('/api/synew')
// }

// 获取新闻详情
export function getNewDetail(id) {
    return service.request({
        method: 'get',
        url: `/new/${id}`,
    })
}

3. 配置跨域(src/vue.config.js)

devServer: {
  // 代理
  proxy: {
    "/api": { // '/api/' 等同于 target 中的地址
      // 跨域的服务器地址
      target: "替换为自己的地址",
      // 是否允许跨域
      changeOrigin: true,
      pathRewrite: {
        // 正则--遇到有devApi开头替换成空---需要重写的路径
        "^/api": "", // ^/api 做替换
      },
    },
  }
},

// 第三方插件配置
pluginOptions: {}

4. 组件中

index.vue

import { onMounted } from "vue";
import { getSynew } from '@/api'
export default {
  name: 'Index',
  setup() {
    onMounted(() => {
      reqSynew();
    })

    // 获取新闻列表
    function reqSynew() {
      getSynew().then(res => {
        console.log(res);
        // 数据处理...
      })
    }

    return {
      reqSynew
    };
  },
};

new.vue

import { onMounted} from 'vue'
import { useRoute } from 'vue-router'
import { getNewDetail } from '@/http/api'
export default {
  name: 'New',
  setup() {
    const initData = reactive({
      newsList: []})

	const route = useRoute()
    // 初始化数据
    const reqNewDetail = (() => {
      getNewDetail(route.params.id).then(res => {
        initData.newsList = res.data[0]
        initData.title = (initData.newsList[0].iscompanynews == 1 ? '公司新闻' : '行业资讯')
      })
    })

    onMounted(() => {
      reqNewDetail();
    })
    
    return { reqNewDetail }
  }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3 axios 的相关文章

随机推荐

  • 树莓派——初级编程

    一 没有屏幕的树莓派如何使用 通过串口连接树莓派 通过官方给的相关文件和软件 xff0c 对树莓派进行刷系统 设备破解 默认情况 xff0c 树莓派的串口和蓝牙连接 想办法断开蓝牙连接 xff0c 把串口用来数据通信 默认账号 xff1a
  • 树莓派gpio驱动编写——不使用wiringPi

    一 相关概念 总线地址 总线地址 xff1a cpu能够访问内存的范围 可以通过cat proc meminfo 来查看内存条大小 物理地址 物理地址 xff1a 硬件的实际地址或绝对地址 虚拟地址 虚拟地址 xff1a 逻辑 xff08
  • 初识网络七层模型

    OSI 模型 Open System Interconnection model 是一个由国际标准化组织 x10fc01 提出的概念模型 试图 x10fc01 供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架 它将计算机网络体系
  • http的简单实现

    一 http协议的特性 http协议是建立在TCP IP协议之上应用层协议 xff0c 默认端口为80 8080 http协议的的特点是无状态 xff0c 无连接 二 http协议的请求 利用抓包工具httpwatch可以获取报文 http
  • Selenium之css怎么实现元素定位?

    世界上最远的距离大概就是明明看到一个页面元素站在那里 xff0c 但是我却定位不到 xff01 xff01 Selenium定位元素的方法有很多种 xff0c 像是通过id name class name tag name link tex
  • 零基础如何学习计算机语言

    一 认识电脑键盘 1 对于一个还没有接触过计算机的人来说认识键盘是重要的 2 通用的几个常见快捷键 xff1a CTRL 43 C 复制 CTRL 43 V 粘贴 CTRL 43 A 全选 CTRL 43 X 剪切 CTRL 43 S 保存
  • 如何用python连接Linux服务器

    1 安装paramiko库 pip install paramiko 2 使用paramiko库连接linux 导入库 import paramiko 创建一个sshclient对象 ssh 61 paramiko SSHClient 允许
  • 包装类

    注意点 包装类是final的类 包装类对象是不变的 与字符串类似 不变模式 共有8种包装类 int Integer long Long byte Byte short Short float Float double Double bool
  • 数据库和缓存如何保证一致性?

    先更新数据库 xff0c 还是先更新缓存 xff1f 有了这个想法后 xff0c 就准备开始着手优化服务器 xff0c 但是挡在在他前面的是这样的一个问题 由于引入了缓存 xff0c 那么在数据更新时 xff0c 不仅要更新数据库 xff0
  • 一名高级的Javaer,应该了解的 MYSQL 高级知识点

    SQL查询流程 1 通过客户端 服务器通信协议与 MySQL 建立连接2 查询缓存 xff0c 这是 MySQL 的一个可优化查询的地方 xff0c 如果开启了 Query Cache 且在查询缓存过程中查 询到完全相同的 SQL 语句 x
  • Python循环语句

    1 for循环 1 for in range xff08 xff09 简单的for循环代码 xff1a for i in range 5 print i 输出的便是0 4形成一列 xff0c 这里rang xff08 5 xff09 xff
  • 【Android自定义注解】BindView

    注意 xff1a 定义的控件变量必须是public xff0c 否则报错 1 添加类 package com example zhujie import java lang annotation Retention import java
  • 数据可视化——(提示框插件)

    提示框插件有很多 xff0c 不同的框架中选择的也不一样 本文主要分享toastr插件总结它的使用步骤如下 xff1a 使用步骤 xff1a 加载 jqury js toastr css 和 toastr js 文件 全局配置 为方便 xf
  • 文章五:Python 网络爬虫实战:使用 Beautiful Soup 和 Requests 抓取网页数据

    一 简介 本篇文章将介绍如何使用 Python 编写一个简单的网络爬虫 xff0c 从网页中提取有用的数据 我们将通过以下几个部分展开本文的内容 xff1a 网络爬虫的基本概念Beautiful Soup 和 Requests 库简介选择一
  • Android Studio编译无错,但在模拟器上无法运行App

    今天在学习郭霖老师的 第一行代码 第三版时碰到一个问题 xff0c 明明运行无错 xff0c 却无法在模拟器上正常运行 一开始提示说 Waiting for all target devices to come online xff0c 在
  • 突破CloudFlare五秒盾付费版

    使用的第三方库 cloudscraper 可以绕过免费版的五秒盾 但遇到付费版就无能为力了 最近在爬币圈的网站 xff0c 其中有一个网站叫做 xff1a Codebase 1 使用的就是付费版的 CloudFlare 五秒盾 当我们使用
  • CentOS-7 配置 SSH 远程登录

    CentOS 7 配置 SSH 远程登录 CentOS 配置 SSH 远程登录一 环境二 配置网络1 检查网络状态2 下载 net tools 工具3 检查主机与虚拟机是否正常连通 三 SSH 配置1 检查 CentOS 系统是否已经安装了
  • Linux中如何使用systemctl进行服务的管理?

    一 运行级别的分类 runlevel 运行级别0 xff1a 系统停机状态 运行级别1 xff1a 单用户工作状态 xff0c root权限 xff0c 用于系统维护 xff0c 禁止远程登陆 运行级别2 xff1a 多用户状态 没有NFS
  • Hibernate的配置

    Hibernate 的配置 1 创建工程 xff1b 2 导入 Jar 包 xff1b 3 写 Hibernate 配置文件 xff08 hibernate cfg xml xff09 a 数据库连接信息 b 映射文件包含配置 4 创建表和
  • vue3 axios

    Axios 是一个基于 promise 网络请求库 xff0c 作用于node js 和浏览器中 简介 Axios 是一个用于浏览器和Node的基于承诺的简单HTTP客户端 它提供了一个易于使用的库 xff0c 占地面积小 它还有一个可扩展