axios的跨越封装

开发环境需要配置代理


  devServer: {
    // host: 'localhost', // ip 本地
    // open: true, // 配置自动启动浏览器
    port: 3000, // 设置端口号
    proxy: {
      '/api': { // 接口以api开头的才用代理
        target: '服务器ip', //axiso实例里的baseURL的值(后端路径)
        changeOrigin: true,
        pathRewrite: {
          //这里理解成用‘/api’代替target里面的地址,组件中我们调接口时直接用/api代替
          // 比如我要调用'http://xxx.xxx.x.xxx:8080/login',直接写‘/api/user/add’即可 代理后地址栏显示/  
          '^/api': '',
        }
      }
    },
  },

axios封装引入

main.js


import axios from "axios";
axios.defaults.withCredentials = true;

在src文件下,创建api/_BaseAxios.js文件

import axios from "axios"; // 引入axios
import AxiosInterceptors from './_AxiosInterceptors' // 引入拦截器规则
 
import {
    RBAC_BASE_URL, // api路径
    TIMEOUT        // 超时时长
} from '../const.js' 
 
let requestConfig = {
    baseURL: RBAC_BASE_URL, // 配置api路径
    timeout: TIMEOUT        // 配置超时时长
}
 
const baseAxios = axios.create(requestConfig); // 创建axios实例
AxiosInterceptors.setInterceptors(baseAxios);  // 使用拦截器规则
 
export default baseAxios;

在src文件下,创建api/_AxiosInterceptors.js文件. 在_BaseAxios中引入

store不需要可以注释掉

import store from "@/store/index";
 
function setInterceptors(axios) {
    // 在被then()和catch()方法处理之前,把 客户端请求 拦截下来优先处理
    // api 返回的数据均为json,如果请求没有指明,则默认视为json
    axios.interceptors.request.use(config => {
        // 在发送请求之前做些什么
        if (store.state.token) {
            // 添加请求头
            config.headers['token'] = store.state.token
            config.headers['Authorization'] = store.state.token
        }
        return config;
    }, error => {
        // 对请求错误做些什么
        return Promise.reject(error);
 
    });
 
    // 在被then()和catch()方法处理之前,把 服务器返回结果 拦截下来优先处理
    axios.interceptors.response.use(response => {
        /*** 响应成功拦截器 */
        // console.log("response", response)
        return response;
    }, error => {
        return Promise.reject(error);
    });
 
    return axios;
}
 
export default {
    setInterceptors
}

新建config.js 在_BaseAxios中引入

// export const PROJECT_NAME = 'Panda';
// export const TOKEY_ATTR_NAME = 'X-Access-Token'; // TOKEN的属性名(即客户端传token到服务端,token的属性名)
// export const IS_LOGIN_NEEDED = true; // 系统是否需要登录后使用
 
let rbacBaseUrl; // 基础API地址
switch (process.env.NODE_ENV) {
    case "production": // 发布到服务器 npm run build
        rbacBaseUrl = '服务器ip/';
        break;
    case "development": // 本机前端开发调试 npm run serve
    default:
        rbacBaseUrl = '/api';
        break;
}
export const RBAC_BASE_URL = rbacBaseUrl;
 
export const TIMEOUT = 10000; // 一般请求超时时间
// export const UPLOAD_TIMEOUT = 0; // 指定文件上传请求超时的毫秒数(0 表示无超时时间)
 
// //文件地址
// export const uploadImgUrl = '服务器ip/';

接口调用

import BaseAxios from "../_BaseAxios";
import ResHelper from "../_ResponseHelper.js";
 
/**
 * @description 登录                   post,data
 * @param {String} account 账号
 * @param {String} password 密码
 */
function login(params) {
    return BaseAxios({
        url: `system/Login/login`,
        method: "post",
        data: {
            "account": params.account,
            "password": params.password,
        }
        // data: params,
    })
    // .then(ResHelper.handler);
}
 
/**
 * @description 注册                   post,params
 * @param {Integer} account 账号
 * @param {String} password 密码
 * @param {String} code 验证码
 * @param {String} mailbox 邮箱
 * @param {String} username 名字
 * @param {Integer} phoneNumber 电话号码
 */
function register(params) {
    return BaseAxios({
        url: `system/Login/register`,
        method: "post",
        params: params
    })
}
 
/**
 * @description 获取用户信息               get
 * @param {String} Authorization 验证信息
 */
function getUser() {
    return BaseAxios({
        url: `system/Login/user`,
        method: "get",
    })
}
 
/**
 * @description 获取申请列表            get,params
 * @param {Integer} pageSize 页数
 * @param {String} keyword 姓名
 */
function getApplyList(params) {
    return BaseAxios({
        url: `system/Personal/list`,
        method: "get",
        params: params,
    })
}
 
export default {
    login,
    register,
    getUser,
    getApplyList,
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

适用于Windows电脑的最佳数据恢复软件是哪些?10佳数据恢复软件

丢失我们系统中可用的宝贵信息是很烦人的。我们可以尝试几种手动方法来重新获取丢失的数据。然而,当我们采用非自动方法来恢复数据时,这是一项令人厌烦和乏味的工作。在这种情况下,我们可以尝试使用一些正版硬盘恢复软件进行数据恢复。此页面…

Dual-AMN论文阅读

Boosting the Speed of Entity Alignment 10: Dual Attention Matching Network with Normalized Hard Sample Mining 将实体对齐速度提高 10 倍:具有归一化硬样本挖掘的双重注意力匹配网络 ABSTRACT 寻找多源知识图谱(KG)中的等效实体是知识图谱集成的关键步骤&…

TRIZ理论下攀爬机器人的创新设计与研究

随着科技的飞速发展,机器人技术已广泛应用于各个领域。特别是在复杂环境下的作业,如灾难救援、太空探测等,对机器人的移动能力和适应性提出了更高要求。在这样的背景下,基于TRIZ理论的攀爬机器人设计与研究应运而生,它…

分类算法——朴素贝叶斯(四)

概率基础 1概率定义 概率定义为一件事情发生的可能性 扔出一个硬币,结果头像朝上 P(X):取值在[0,1] 2女神是否喜欢计算案例 在讲这两个概率之前我们通过一个例子,来计算一些结果: 问题如下: 1、女神喜欢…

Python pyglet制作彩色圆圈“连连看”游戏

原文链接: Python 一步一步教你用pyglet制作“彩色方块连连看”游戏(续)-CSDN博客文章浏览阅读1.6k次,点赞75次,收藏55次。上期讲到相同的色块连接,链接见: Python 一步一步教你用pyglet制作“彩色方块连连看”游戏-…

Python基于Django搜索的目标站点内容监测系统设计,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

【Android GUI】FramebufferNativeWindow与Surface

文章目录 显示整体体系FramebufferNativeWindowFramebufferNativeWindow构造函数 dequeueBufferSurface总结参考 显示整体体系 native window为OpenGL与本地窗口系统之间搭建了桥梁。 这个窗口系统中,有两类本地窗口,nativewindow1是能直接显示在屏幕的…

超平实版Pytorch CNN Conv2d

torch.nn.Conv2d 基本参数 in_channels (int) 输入的通道数量。比如一个2D的图片,由R、G、B三个通道的2D数据叠加。 out_channels (int) 输出的通道数量。 kernel_size (int or tuple) kernel(也就是卷积核,也可…

selenium反反爬虫,隐藏selenium特征

一、stealth.min.js 使用 用selenium爬网页时,常常碰到被检测到selenium ,会被服务器直接判定为非法访问,这个时候就可以用stealth.min.js 来隐藏selenium特征,达到绕过检测的目的 from selenium import webdriver from seleniu…

接口压力测试 jmeter--入门篇(一)

一 压力测试的目的 评估系统的能力识别系统的弱点:瓶颈/弱点检查系统的隐藏的问题检验系统的稳定性和可靠性 二 性能测试指标以及测算 【虚拟用户数】:线程用户【并发数】:指在某一时间,一定数量的虚拟用户同时对系统的某个功…

5.11 mybatis之returnInstanceForEmptyRow作用

文章目录 1. 当returnInstanceForEmptyRowtrue时2 当returnInstanceForEmptyRowfalse时 mybatis的settings配置中有个属性returnInstanceForEmptyRow,该属性新增于mybatis的3.4.2版本,低于此版本不可用。该属性的作用官方解释为:当返回行的所…

如何快速上手:springboot+mongodb

当使用 Java Spring Boot 与 MongoDB 时,可以使用 Spring Data MongoDB 来轻松地进行数据库操作。以下是一个简单的示例,演示如何在 Spring Boot 中使用 MongoDB 进行基本的 CRUD(创建、读取、更新、删除)操作。 Spring Data for …

代码随想录训练营day39

第九章 动态规划part02 1.LeetCode. 不同路径 1.1题目链接:62.不同路径 文章讲解:代码随想录 视频讲解:B站卡哥视频 1.2思路:采用动态规划算法 想要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][…

论文解读:(CoOp)Learning to Prompt for Vision-Language Models

文章汇总 存在的问题 虽然训练类别通常具有文本形式,例如“金鱼”或“卫生纸”,但它们将被转换为离散标签,只是为了简化交叉熵损失的计算,从而使文本中的语义封装在很大程度上未被利用。这样的学习范式将视觉识别系统限制在闭集…

【QOpenGL实践】QOpenGLWidget

目录 一、说明 二、QOpenGLWidget 类对象 2.1 概要 2.1.1 函数功能 2.1. 2 三个虚函数 2.1.3 信号 2.2 详细说明 2.2.1 三个虚函数 2.2.2 绘画技巧 2.2.3 OpenGL 函数调用、标头和 QOpenGLFunctions 三、实现代码示例 3.1 最简模式 3.2 与 QGLWidget 的关系 3.3…

LeetCode———144—— 二叉树的前序遍历

目录 ​编辑 1.题目 2.解答 1.首先计算二叉树的节点个数: 2.以先序遍历(Preorder Traversal)的方式遍历一个二叉树,并将遍历到的节点的值存储在一个整数数组中 3.最终代码 1.题目 . - 力扣(LeetCode) 给…

123页|华为项目管理精华-成功的项目管理(免费下载)

【1】关注本公众号,转发当前文章到微信朋友圈 【2】私信发送 华为项目管理精华 【3】获取本方案PDF下载链接,直接下载即可。 如需下载本方案PPT原格式,请加入微信扫描以下方案驿站知识星球,获取上万份PPT解决方案!&a…

IDEA Tomcat localhost 日志和 catalina日志乱码(解决)

只需要修改 Tomcat 的 logging.properties D:\work\apache-tomcat-8.5.70-windows-x64\apache-tomcat-8.5.70\conf

SpringMVC 常用注解介绍

Spring MVC 常用注解介绍 文章目录 Spring MVC 常用注解介绍准备1. RequestMapping1.1 介绍2.2 注解使用 2. 请求参数2.1 传递单个参数2.2 传递多个参数2.3 传递对象2.4 传递数组 3. RequestParam3.1 注解使用3.2 传入集合 4. RequestBody5. PathVariable6. RequestPart7. Rest…

Since Maven 3.8.1 http repositories are blocked.

编译maven 项目时候报错提示下面信息: Since Maven 3.8.1 http repositories are blocked.Possible solutions: - Check that Maven settings.xml does not contain http repositories - Check that Maven pom files do not contain http repository http://XXXXXX:…