vue中axios请求篇

news2024/11/23 15:39:55

vue中如何发起请求?

利用axios来发起请求,但是前期需要配置

首先安装axios

可以使用npm、yarn等进行安装

  1. npm安装方式
npm install axios -sava //在项目文件夹中打开cmd或者终端进行安装依赖
  1.  yarn安装方式
yarn add axios

引入axios。我一般是在src下创建一个utils文件夹,在其中新建一个request.js放置封装好的axios

 2.创建实例

// 创建实例
const instance = axios.create()

// 创建实例后修改默认值
axios.defaults.baseURL = process.env.NODE_ENV == 'development' ? 'http://127.0.0.1:8081' : 'https://api.example.com' // 默认请求地址,需根据环境判断请求的路径
axios.defaults.timeout = 10000 // 超时时间,单位毫秒
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded' // post请求头的设置

 3.请求拦截

/**
 * 请求拦截器
 * 每次请求前,如果存在token则在请求头中携带token
 */
axios.interceptors.request.use(
    config => {
        LoadingBar.start()
        // 添加token
        const token = getToken()
        token && (config.headers.Authorization = "Bearer " + token)
        return config
    },
    error => Promise.error(error)
)

4. 响应拦截 

/**
 * 响应拦截器
 * 每次请求后,判断请求状态码是否正确,及数据做处理
 */
axios.interceptors.response.use(
    /**
     * 传输层:接口正常或异常,用http状态码
     * 业务层:业务正常或异常,用自定义状态码
     */
    // 请求成功
    res => {
        LoadingBar.stop()
        // HTTP 状态码
        if (res.status !== 200) {
            return Promise.reject(res)
        }

        // 业务状态码
        let code = res.data.code
        if (!code || code === 2000) {
            // 无code,则请求的是html页面;有code,则返回请求的数据
            return Promise.resolve(res.data)
        }

        errorHandle(code, res.data.msg)
        return Promise.reject(false)
    },
    // 请求失败
    error => {
        LoadingBar.stop()
        const { response } = error
        if (response) {
            // 请求已发出,但是不在2xx的范围 
            errorHandle(response.status, response.data.message)
            return Promise.reject(response)
        } else {
            tip('网络出现故障,请稍后再试')
        }
    }
)

5. 错误处理 

/**
 * 请求失败后的错误统一处理
 * @param {Number} status 请求失败的状态码
 */
const errorHandle = (status, msg) => {
    // 状态码判断
    switch (status) {
        // 2002: 用户名/密码错误
        case 2002:
            tip('用户名或密码错误!')
            break
        // 4003: token过期,清除token并跳转登录页
        case 4003:
            toLogin("登录信息过期")
            break
        // 其他状态码
        ...
        default:
            tip('后台维护中,请稍后再试')
    }
}

/**
* 提示函数
*/
const tip = msg => {
    // 使用UI框架自带的错误弹框即可
    Vue.prototype.$msg.error(msg)
}

/**
 * 跳转登录页
 * 携带当前页面路由,以便在登录完成登录后返回当前页面
 */
const toLogin = async (msg) => {
    // 移除token、用户信息

    // 跳转登录页
    router.replace({
        path: '/login',
        query: {
            redirect: router.currentRoute.fullPath
        }
    })
}

使用 axios

 1. 创建api接口

  以user模块为例,在src目录下新建api文件夹,用来存放项目的所有接口请求,新建user.js,代码如下

import axios from '@/utils/request'

/**
 * @description: 用户登录
 * @param {String} username 用户名
 * @param {String} password 密码(aes加密)
 */
export const userLogin = params => {
    return axios.post('/user/login', params)
}
// 其他user接口
...

页面使用

import { userLogin } from '@/api/user'

userLogin({
  username: this.username,
  password: this.password, // 记得加密QAQ
}).then(res => {
  this.$msg.success('登录成功')
})

不封装单独使用

<script>

//页面引入
import axios from 'axios'

export default {
    data() {
        return {
            url:'https://xxxxxxxxxxxx.com/index.php?xxxxx'
        },
    },
    methods: {
        getVipAsklist(){
            axios.get(this.url).then(res => {
                console.log(res);
                if(res.data.result =='1'){
                    this.asklist = res.data.qa_lsit
                    this.asklist = this.asklist.map((item)=>{
                        return {
                            title:item.title,
                            content:item.content.replace(/\"/g, "&quot;")
                        }
                    })
                    console.log(typeof this.asklist[0].content)
                    this.agrement = res.data.xieyi
                    return
                }
                this.$message.error(res.msg)
            })
        },
    }
}
</script>

完美结束~

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

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

相关文章

【C++】学习C++STL中的数组——vector

❤️前言 好久不见大家&#xff01;今天的这篇博客是关于我对于STL(C标准模板库)中的容器vector的学习和理解&#xff0c;希望大家能够喜欢。 正文 vector是STL中的一种序列容器&#xff0c;对应着数据结构中的顺序表&#xff0c;也可以说是数组。在我们正式学习了解vector之前…

spring boot 测试用例

依赖包 <dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.2.5.RELEASE</version><scope>compile</scope></dependency><dependency><groupId>ju…

Autoware.universe部署05:实车调试

文章目录 一、建图1.1 点云地图1.2 高精地图 二、参数配置三、传感器数据通信接口3.1 雷达点云3.2 图像3.3 IMU3.4 GNSS RTK 四、实车调试4.1 编写启动4.2 修改传感器外参4.3 修改车身参数4.4 实车调试 本文介绍了 Autoware.universe 在实车上的部署&#xff0c;本系列其他文章…

《Web安全基础》04. 文件上传漏洞

web 1&#xff1a;文件上传漏洞2&#xff1a;WAF 绕过2.1&#xff1a;数据溢出2.2&#xff1a;符号变异2.3&#xff1a;数据截断2.4&#xff1a;重复数据 本系列侧重方法论&#xff0c;各工具只是实现目标的载体。 命令与工具只做简单介绍&#xff0c;其使用另见《安全工具录》…

2023京东口腔护理赛道行业数据分析(京东销售数据分析)

近年来&#xff0c;口腔护理逐渐成为年轻人重视的健康领域&#xff0c;从口腔护理整体市场来看&#xff0c;牙膏和牙刷等基础口腔护理产品仍占据主导地位。不过&#xff0c;随着口腔护理市场逐步朝向精致化、专业化、多元化等方向发展&#xff0c;不少新兴口腔护理产品受到消费…

C++学习|CUDA内存管理代码实例

前言&#xff1a;之前介绍了CUDA入门知识&#xff0c;对CUDA编程有了一个基本了解&#xff0c;但是实际写起来还是遇到很多问题&#xff0c;例如cpp文件该怎么调用cuda文件、cpu和gpu之间内存数据怎么交换、如何编写.cu和.cuh文件之类的。本篇文章将会以一个实现向量相加的代码…

【数据结构】二叉数的存储与基本操作的实现

文章目录 &#x1f340;二叉树的存储&#x1f333;二叉树的基本操作&#x1f431;‍&#x1f464;二叉树的创建&#x1f431;‍&#x1f453;二叉树的遍历&#x1f3a1;前中后序遍历&#x1f4cc;前序遍历&#x1f4cc;中序遍历&#x1f4cc;后续遍历 &#x1f6eb;层序遍历&am…

什么是Python爬虫分布式架构,可能遇到哪些问题,如何解决

目录 什么是Python爬虫分布式架构 1. 调度中心&#xff08;Scheduler&#xff09;&#xff1a; 2. 爬虫节点&#xff08;Crawler Node&#xff09;&#xff1a; 3. 数据存储&#xff08;Data Storage&#xff09;&#xff1a; 4. 反爬虫处理&#xff08;Anti-Scraping&…

2023-08-30力扣每日一题

链接&#xff1a; 1654. 到家的最少跳跃次数 题意&#xff1a; 从0出发&#xff0c;到X的最少步数 它可以 往前 跳恰好 a 个位置&#xff08;即往右跳&#xff09;。它可以 往后 跳恰好 b 个位置&#xff08;即往左跳&#xff09;。它不能 连续 往后跳 2 次。它不能跳到任何…

2023新版医保目录明细(药品查询)

查询医保目录的主要目的是为了了解医保政策对于特定医疗服务、药品和医疗器械的覆盖范围和支付标准。大众可以通过查看医保目录可以确定哪些药品可以被医保支付以及报销的比例和限额&#xff1b;医药从业者可通过查看医保目录可以即使了解医保政策的变化&#xff0c;便于做出相…

Window10 安装 Lua

1、下载地址&#xff1a;https://luabinaries.sourceforge.net/download.html 2、下载 3、解压后共有4个文件&#xff0c;这里我把这几个文件放到如下目录 D:\Program Files\lua-5.4.2\bin 4、定义环境变量 5、打开 powershell&#xff0c;运行 lua54 -v PS C:\Windows\syste…

qt设计界面

widget.h #ifndef WIDGET_H #define WIDGET_H //防止文件重复包含#include <QWidget> //QWidget类所在的头文件&#xff0c;父类头文件 #include<QIcon> #include<QPushButton> …

Facebook Shops免费面世 Facebook与Instagram携手并肩

图片来源&#xff1a;SaleSmartly官网 近年来网上购物剧增&#xff0c;电子商务越趋重要&#xff0c;Facebook 和Instragram乘势推出Facebook Shops&#xff0c;免费让零售商户在全球最多使用者的两个社交平台创建线上商户&#xff0c;展示产品和进行交易&#xff0c;助零售业走…

DataTable扩展 列转行方法(2*2矩阵转换)

源数据 如图所示 // <summary>/// DataTable扩展 列转行方法&#xff08;2*2矩阵转换&#xff09;/// </summary>/// <param name"dtSource">数据源</param>/// <param name"columnFilter">逗号分隔 如SDateTime,PM25,PM10…

SmokePing网络延迟和丢包监测工具

SmokePing是一种网络延迟和丢包监测工具&#xff0c;其监控原理如下&#xff1a; 监测目标选择&#xff1a;SmokePing通过配置文件&#xff08;Targets&#xff09;定义了要监测的目标&#xff0c;可以是主机、路由器、服务器或其他网络设备。每个目标都有一个唯一的名称和IP地…

9个实用的交互设计软件,Get更简单的原型制作方式!

好用的原型图软件不仅可以快速可视化产品经理的想法&#xff0c;提高沟通效率&#xff0c;还可以加快测试进度&#xff0c;打造更真实的用户体验。今天本文为大家整理了9个好用的原型图工具&#xff0c;一起来看看吧&#xff01; 1、即时设计 在设计场景中&#xff0c;即时设…

基于MyBatis注解的学生管理程序--mybatis注解开发的练手项目

基于MyBatis注解的学生管理程序 需求&#xff1a;完成基于MyBatis注解的学生管理程序&#xff0c;能够用MyBatis注解实现查询操作、实现修改操作、实现一对多查询 &#xff08;1&#xff09;MyBatis注解开发实现查询操作。根据表1和表2在数据库分别创建一个学生表tb_student和…

【CicadaPlayer】getPlayerBufferDuration分析

https://github.com/alibaba/CicadaPlayer/blob/release/0.4.4/mediaPlayer/SuperMediaPlayer.cpp核心关键函数int64_t SuperMediaPlayer::getPlayerBufferDuration(bool gotMax, bool internal)17个地方出现: getPlayerBufferDuration的durations 数组 分别 对音频、视频、字…

登录页面设计的7个小细节,帮你提升用户体验

移动 APP 登录页面的设计直接影响到用户体验&#xff0c;从而决定 APP 的成败。我们应该设计出令用户兴奋而不是沮丧的登录界面。下面就让我和你分享几个提升登录页面 UX 设计的技巧: 如果用户必须登录才能使用服务&#xff0c;那么需要仔细考虑登录表单。 在构建登录页面设计…

简单数学题:找出最大的可达成数字

来看一道简单的数学题&#xff1a;力扣2769. 找出最大的可达成数字 题目描述的花里胡哨&#xff0c;天花乱坠&#xff0c;但这道题目非常简单。我们最多执行t次操作&#xff0c;只需每次操作都让x-1&#xff0c;让num1&#xff0c;执行t次操作后&#xff0c;x就变为xt&#xff…