Vue3-使用axios发起网络请求

news2024/11/20 7:21:26

即使是小型项目也会涉及到请求后端API,除非你的网站展示的是一些不需要维护的静态数据,第三篇文章我们来给Vue项目搞上axios。

  1. 何为Axios ?请看官方对Axios的描述,传送门:官方文档

Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。

  1. 如何安装Axios, 这部分我使用了几个不同版本的node都没有报错,兼容性还是不错的。
	yarn add axios 
  1. 在本篇文章中我们会讲解如何封装网络请求和全局实例化axios,官网的实例都是在单个文件中局部实例化axios,在项目上使用不多。

按照之前的文章操作成功后,还需要在你的项目src目录下新建api文件夹

在这里插入图片描述
4. api.js是什么?这里面封装了所有的API请求,可以指定是否有参数,指定请求的类型是GET、POST、DELETE还是PUT

import http from './http.js'

// 获取验证码,这个函数指的是使用GET请求请求目标服务器的
Captcha路由
export function getCaptcha() {
    return http.get("/captcha")
}  
// 验证用户名\密码,这里指的是使用POST方法请求Login接口,并携带params对象作为参数。
export function verifyUserNameAPI(params) {
    return http.post("/login", params)
}
  1. http.js是什么?
import request from '@/api/request'
const http = {
        get(url, params) {
            const config = {
                method: 'get',
                url: url
            } /*这里如果GET请求有参数,则携带上传入的参数,在
            URL中以?的方式放在请求链接中*/
            if (params) config.params = params
            return request(config)
        },
        post(url, params) {
            const config = {
                method: 'post',
                url: url
            }/*同理也是传入用户需要发送到后台的参数,这些参数
            放在报文中,载体表达标准是JSON*/
            if (params) config.data = params
            return request(config)
        },
    }
    
//暴露接口,允许Vue文件或其他js,ts文件使用http结构体中的方法
export default http
  1. request.js是什么?这个是核心的JS文件,表明了后端的地址,接口超时时间,以及请求拦截器和响应拦截器部分。
import axios from 'axios';
// 创建一个自定义的Axios对象
const Axios = axios.create({
    baseURL: 'http://127.0.0.1:1234',
    timeout: 3000,
    /*也可以不设置Content-Type,影响是在你发送请求时
    Vue会先发送OPTIONS包探测路由是否存在,需要后端也做设置响应OPTIONS
    方法,否则会报跨域错误;我这里用的Beego2,路由里不响应OPTIONS方法,
    所以我在这块设置Content-Type*/
    headers: { 
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    /*这个配置很重要,允许axios携带用户Cookie到后端,不设置这个的话
    Set-Cookie是无效的,除此之外,Chrome默认开启了SameSite检查,如果
    后端不主动设置SameSite = none,Set-Cookie是无效的。详情请文章末尾
    参考阮老师的SameSite讲解*/
    withCredentials: true
});

Axios.interceptors.request.use(req => {
    // 请求拦截处理
    // console.log('这里是请求拦截器,我拦截了请求', req);
    return req; 
}, err => {
    console.log('在发送请求时发生错误,错误为', err);
    //这里不能直接放回err,需要按照官方说明返回一个Promise
    return Promise.reject(err);
})

Axios.interceptors.response.use(res => {
        // 响应拦截处理
        // console.log('响应拦截 ', res);
        return res.data;
    }, error => {
        const err = error.toString();
		//按照实际的响应包进行解析,通过关键字匹配的方式
        switch (true) {
            case err.indexOf('Network') !== -1:
                console.log('后端服务器无响应或者URL错误', err);
                break;
            case err.indexOf('timeout') !== -1:
                console.log('请求后端服务器超时!', err);
                break;
        }
        return Promise.reject(error);
    })

//暴露Axios实例化对象,允许所有文件调用Axios
export default Axios;
  1. 如何在Vue文件中请求封装好的API呢?
//导入声明的API请求函数
import { getCaptcha } from "@/api/api";
import { useMessage } from "naive-ui";

export default {
  setup() {
    let captchaId = ref();
    onMounted(() => {
       //onMounted是Vue声明周期的钩子函数,由Vue提供,
       //请参考Vue声明周期钩子官方文档
      getcaptchaAPI();
    });
    function getcaptchaAPI() {
      getCaptcha()
        .then((res) => {
          /*这里的res是响应成功是返回的数据,res.data说明获取报文
          中的data字段对应的值,我在setup声明使用的ref,所以赋值时
          需要使用captchaId.value的方式*/
          captchaId.value = res.data;
        })
        //在这里处理错误
        .catch((err) => console.log(err));
    }
   }
}

今天的分享就到这里了,现在你的项目既能请求后端接口,又能进行路由跳转,具备了项目的基本条件,可以尝试写一个简单地页面了。

参考文章:

  • 传送门:Cookie 的 SameSite 属性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue项目中使用md5加密、crypto-js加密、国密sm3、国密sm4

项目中涉及到一些加密解密的需求,了解并尝试了几种加密解密方法,以下: 方法一:md5加密 注意:md5的特性就是只能加密,所以用md5加密的时候,一定要记住你填写的内容,因为它是无法解密…

Vue el-menu-item实现路由跳转

场景:用了element-ui的el-menu 菜单 怎样实现路由跳转呢? 1,在el-menu加上router,添加el-menu的default-active属性,加:动态绑定,值设置为"this.$router.path" , 2&#x…

解决跨域Access to XMLHttpRequest at ‘http://localhost:8080/xxx’ from origin ‘http://localhost:63342

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

web前端-JavaScript中的forEach和map方法

🐚作者简介:苏凉(专注于网络爬虫,数据分析,正在学习前端的路上) 🐳博客主页:苏凉.py的博客 🌐系列总专栏:web前端基础教程 👑名言警句&#xff1a…

vue项目,如何关闭eslint检测?多种解决办法

新版本vue项目,如何关闭eslint检测一、问题描述二、问题解决1、首先是比较旧的vue项目2、创建项目的时候,不要选eslint3、如果你使用的编辑软件是webstorm4、创建的项目没有webpack.base.conf.js文件,但是有 .eslintrc.js5、比较新的vue项目&…

vue3获取元素并修改元素样式

🔥🔥🔥欢迎关注csdn前端领域博主: 前端小王hs 🔥🔥🔥email: 337674757qq.com 🔥🔥🔥前端交流群: 598778642 需求:获取元素的样式并且修改元素样式…

猿创征文|我的前端学习之旅【来自一名大四老学长的真情流露】

猿创征文 | 我的前端学习之旅自我介绍我浑噩的大一大二(是不是另一个你)我的大三生活大三上(学习过程、学习方法、推荐网站)大三下(技术提升、荣誉证书、推荐比赛)我与 CSDN 的机缘(从小白到创作…

【微信小程序】视图容器和基本内容组件

开发者可以通过运用组件快速搭建出页面结构,上一章也有对组件进行介绍,那么本文牛牛就来带大家学习小程序的组件。 我们可以将组件理解为微信内嵌的标签,它在小程序承担的作用与HTML的标签一致,不过组件的功能更加多样、具体。 事…

如何在UNI-APP内开发微信公众号(H5)JSSDK

参考文章 UNI-APP 开发微信公众号(H5)JSSDK 的使用方式 微信内H5使用JSSDK分享!!!注意目前Hbuilderx2.3.7版本存在问题!!! vue-router与location.href的用法区别 微信网页开发 JSSDK…

近四十场面试汇聚成的超全Web服务器面经总结

上期写了简历项目链接简历项目烂大街怎么办?教你最有谱的摆烂,有位读者照做以后,拿下了主管面,在群里宣传以后,最近多了不少小伙伴来催我更新服务器项目相关知识点。 这份总结是我之前秋招的时候,根据每次…

JS的事件介绍

JS的事件介绍 JS(JavaScript)是基于对象(Object-based)、事件驱动的脚本语言。 JS事件,就是用户或浏览器本身的某种行为,一般是用户对页面的一些动作引起的,例如,单击某个链接或按…

分享5款实用且免费的软件,让你轻松地完成任务

在日常工作和生活中,使用一些实用的小巧工具软件可以提高效率,让你更轻松地完成任务。 1.图像编辑——Paint.NET Paint.NET是一款免费的图像编辑软件,具有多种高级功能和插件支持。它支持多种文件格式、层、魔术棒、文本、画笔、形状、调整…

【C#+JavaScript+SQL Server】实现Web端在线考试系统 五:考试模块设计(附源码和资源)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、考试模块概述 在线考试系统中的考试模块主要包括阅读考试规则,选择考试科目,随机抽取试题,答题计时器以及自动交卷并评分等功能 在开发考试系统过程中,需要考虑的一点是如何将试…

前端工程化详解——理解与实践前端工程化

前言: 前端工程化一直是一个老生常谈的问题,不管是面试还是我们在公司做基建都会经常提到前端工程化,那么为什么经常会说到前端工程化,并没有听过后端工程化、Java工程化或者Python工程化呢?我们理解的前端工程化是不是…

uniappvideo避坑指南(H5、小程序、app)

今天写下这篇文章已是蓄谋已久了,背景是年初接到项目需求开发基于H5运行的视频学习平台,以及后来uniapp转小程序app开发。相信开发过uniapp的video应该或多或少都遇到过一些坑,开场就不多说了,直接上干货。 项目要求用户不得拖动…

vue3引入router

1.添加vue-router依赖 进入项目路径的cmd下,执行命令 npm install vue-router4 或者yarn add vue-router4 推荐使用yarn命令,比npm安装更快 2.执行npm install重新加载依赖 3.在src文件夹下创建一个router文件夹 4.在router文件夹下创建index.js文件&…

JavaScript核心技术之JSON详解

JSON是什么? JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用…

undetected_chromedriver的使用

undetected_chromedriver是专门针对浏览器识别做出来的拓展 直接使用undetected_chromedriver第三方库 if __name__ __main__:from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom sel…

前端数据加密的几种方式

1.base64加密方式 1.1 base64是什么? Base64,顾名思义,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号""、"/"一共64个字符的字符集,(另加一个“”,实际是65个字符,至…

Access-Control-Allow-Origin跨域解决及详细介绍

首先,跨域不是问题。是一种安全机制。 这是你在开发时、上线前就必须提前考虑到的安全问题并且采取合适的手段去避免这个问题带来的程序错误。不过通常情况下,前端开发的小伙伴们都非常坚信后端小伙伴的接口一定已经处理好了跨域这个需求。然而事实上许多…