Vue封装API,详细解释。

news2024/11/25 18:48:20

1、为什么我们要封装API

ps: 如果已经有了明确要封装API的需求,直接看第二步。

在没有封装API之前,我们是类似这样使用 axios 的

this.$axios.post('blogArticle/frontList',parms).then((resp) => {      this.blogList = resp.data,      this.blogTotal = resp.total * 1})

封装之后这样调用

userlist(parms).then(resp => {              this.blogList = resp.data,      this.blogTotal = resp.total * 1})

我们先不看具体是怎么封装的,单看使用,发现好像写的代码一样多呢。(等你了解了封装之后,可能觉得封装写的代码更多一些)

我最开始就是有这样的疑惑,所有我一直没有使用API的封装,因为我确实找不到使用它的理由。

下面我们来看这个问题:假如上面这个API你在100个页面都使用到了,而这时候后端因为某种原因需要你改一下地址从 blogArticle/frontList 改成 blogArticle/list 呢?

  • 那你是不是要改一百次?

  • 改一百次还是时间问题,问题是你知道这一百个页面都在哪里嘛?你根本找不到

  • 不要有杠精说你的API不会重复使用一百次。

为了解决上面的问题,和使得代码更加的规范,我们可以把API进行封装。

2、如何封装API

2-1:配置axios过滤器 request.js

  • 你需要修改成 你的请求地址前缀 axios.defaults.baseURL

  • 我这里使用了ElementUI的Message,如果没有,你可以去掉。

     

request.js

/** * ajax请求配置 */import axios from 'axios'import { Message } from 'element-ui'
// axios默认配置axios.defaults.timeout = 10000 // 超时时间// axios.defaults.baseURL 请求地址前缀// User地址// axios.defaults.baseURL = 'http://127.0.0.1:8001'// tools地址// axios.defaults.baseURL = 'http://127.0.0.1:8088'// 微服务地址axios.defaults.baseURL = 'http://myzuul.com:9527/xdx'
// 整理数据axios.defaults.transformRequest = function(data) {    data = JSON.stringify(data)    return data}
// 路由请求拦截axios.interceptors.request.use(    config => {        config.headers['Content-Type'] = 'application/json;charset=UTF-8'
        return config    },    error => {        return Promise.reject(error.response)    })
// 路由响应拦截axios.interceptors.response.use(    response => {        if (response.data.success === false) {            return Message.error(response.data.errDesc)        } else {            return response.data        }    },    error => {        return Promise.reject(error.response) // 返回接口返回的错误信息    })export default axios

2-2:创建API authority.js

  • 这里我写两个演示,一个是get请求,一个是post请求。传递的到后台都是json格式的。

     

authority.js

// 权限管理API  【菜单、角色、权限】import request from '@/utils/request'
/** * 添加菜单 * @param {*} data * @author 小道仙 * @date 2020年2月19日 */export function addMenu(data) {    return request({        url: '/myuser/authority/menu/add',        method: 'post',        data    })}
/** * 菜单列表 * @param {*} query * @author 小道仙 * @date 2020年2月19日 */export function menuList(query) {    return request({        url: '/myuser/authority/menu/list',        method: 'get',        params: query    })}

2-3:具体使用

1、在我们需要使用API的页面,引入

 

2、使用

addMenu() {     addMenu(this.menuData).then(resp => {           this.drawer = false           this.$message.success(resp.msg)           this.getList()           this.handleClose()      })},
getList() {     const param = {          flag: 1     }     menuList(param).then(resp => {          this.tableData = resp.data     })}

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

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

相关文章

【玩转Linux操作】Linux常用文件管理命令

🎊专栏【玩转Linux操作】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题🥰 目录 ​编辑 🎁ctrlc 🎁ctrlu 🎁t…

chatgpt赋能python:Python平均分函数:简介和使用方法

Python平均分函数:简介和使用方法 如果您正在寻找如何计算Python中多个数字值的平均分数的方法,请继续阅读。本文将为您介绍Python中平均分函数的用途和使用方法。 什么是平均分函数? Python的平均分函数是一个计算多个数字值的平均值的函…

分享可以在线录音实时转写的方法

小伙伴们使用过录音记录吗?那知道录音实时转写吗?有没有听说过这个功能呢?它是可以通过语音识别技术,将录音中的信息快速转换为文本,并实现实时显示输出的功能。听起来是不是很有趣?而且它无需任何专业设备…

线程,你是个什么?

线程的基本定义 线程(Thread)是操作系统能够进行运算调度的最小单位,它被包含在进程(Process)中,是进程中的实际运作单位。一个线程可以与同一进程中的其他线程共享进程的全部资源,包括内存、文…

深入浅出讲解闭包及其原理

闭包 什么是闭包? 闭包的概念并不复杂,但是它的定义比较绕(就像平时经常用到它,却又说不出来是什么)。可以在一个作用域中调用函数的内部函数并访问到该函数中的作用域的成员,这就是闭包。给一个建议&…

springboot整合swagger3

目录 一、导入swagger3的依赖二、SwaggerConfig代码的解读三、整体代码四、访问swagger3 一、导入swagger3的依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</versi…

【算法与数据结构】209.长度最小的子数组

文章目录 题目一、暴力穷解法二、滑动窗口法完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 题目 一、暴力穷解法 思路分析&#xff1a;这道题涉及到数组求和&#xff0c;那么我们很容易想到利用两个for循环来写&#xff0c;…

【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第20套

少儿编程 蓝桥杯青少组科技素养题真题及解析第20套 1、“唐纳德特朗普 (Donald Trump) 曾经是美国总统”是一个 (),“特朗普关于新冠肺炎疫情的不实言论”是一个 ()。 A、事实;事实 B、观点;事实 C、观点;观点 D、事实;观点 答案:D 考点分析:主要考查小朋友们对时事的…

ChatGPT的未来发展

文章目录 1.什么是ChatGPT2.ChatGPT的基础技术3.ChatGPT工作原理4.ChatGPT应用场景5.ChatGPT局限性6.ChatGPT的未来发展 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xff…

【严重】vm2 <3.9.18 沙箱逃逸漏洞(存在POC)

漏洞描述 vm2 是一个基于 Node.js 的沙箱环境&#xff0c;可以使用列入白名单的 Node 内置模块运行不受信任的代码&#xff0c;代理对象用于拦截并重定义宿主对象的各种操作。 vm2 3.9.18之前版本中&#xff0c;由于 prepareStackTrace 函数直接由 V8 引擎调用&#xff0c;其…

Linux命令(30)之ps

Linux命令之ps 1.ps介绍 linux命令ps是用来查看系统进程的命令。类似与Windows任务管理器中查看到的进程的功能。 2.ps用法 ps [参数] ps常用参数 参数说明-A显示所有的进程数据-a显示跟当前终端关联的所有进程-u基于用户的格式显示-x显示所有进程&#xff0c;不以终端机来…

chatgpt赋能python:用Python建立600*600画布,打造更好的数据可视化!

用Python建立600*600画布&#xff0c;打造更好的数据可视化&#xff01; 简介 数据可视化是数据分析的重要工具之一&#xff0c;通过可视化工具可以更加直观地展现数据&#xff0c;帮助人们更好地理解数据。而Python语言中的matplotlib库正是其中一款功能强大的数据可视化工具…

如何提升自身 WEB 渗透能力?

前言 web 渗透这个东西学起来如果没有头绪和路线的话&#xff0c;是非常烧脑的。 理清 web 渗透学习思路&#xff0c;把自己的学习方案和需要学习的点全部整理&#xff0c;你会发现突然渗透思路就有点眉目了。 程序员之间流行一个词&#xff0c;叫 35 岁危机&#xff0c;&am…

基于MATLAB的Filter使用,低通、带通和高通滤波器的MATLAB程序分享

基于MATLAB的Filter使用&#xff0c;低通、带通和高通滤波器的MATLAB程序分享 完整程序如下&#xff1a; clear all close all clc %% Parameter Interface Frequence0 60; %单位&#xff1a;Hz Frequence1 130; %单位&#xff1a;Hz F…

002-从零搭建微服务-认证中心(二)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff1a;https://gitee.com/csps/mingyue 文档地址&#xff1a;https://gitee.com/csps/mingyue/wikis 创建新项目 MingYue Idea 创建 maven 项目这…

【算法与数据结构】59、LeetCode螺旋矩阵2

文章目录 题目一、方向向量法完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 题目 一、方向向量法 思路分析&#xff1a;螺旋矩阵在旋转过程中&#xff0c;我们选择的区间是左闭右开区间[ , ]&#xff0c;例如方向为从左往右…

【玩转Linux操作】Ubuntu创建桌面快捷方式

&#x1f38a;专栏【玩转Linux操作】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题&#x1f970; 目录 &#x1f34e;进入applications文件夹 &#x1f34e;选择需要添加到…

chatgpt赋能python:Python开发平台软件的重要性

Python开发平台软件的重要性 随着科技的不断进步和软件开发的发展&#xff0c;Python语言逐渐成为最受欢迎和广泛使用的编程语言之一。作为一门高级编程语言&#xff0c;Python具有简单易懂的语法和强大的功能&#xff0c;能够帮助开发者快速构建复杂的应用程序和网站。Python…

初学者应该怎么学git-下

初学者应该怎么学git-下 Git 文件管理 文件四种状态 ● 版本控制就是对文件的版本控制&#xff0c;在Git 管理中&#xff0c;文件被统一管理&#xff0c;有四个状态 Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git 库, 不参与版本控制. 通过git add 状态变为Stage…

高性能网络应用框架

技术主题 Netty从本质上讲是一个高性能网络应用框架&#xff0c;之所以说是高性能&#xff0c;依赖于Netty的线程模型。 一网络编程性能的瓶颈 BIO 模型里&#xff0c; read() 操作和 write() 操作都会阻塞当前线程的&#xff0c;如果客户端已经和服务端建立了一个连接&…