网站建设开始学什么广州平面设计培训机构

news/2025/9/23 10:17:32/文章来源:
网站建设开始学什么,广州平面设计培训机构,台州做网站比较好的有哪些,wordpress在线阅读pdfVue Element UI 实现权限管理系统 前端篇#xff08;三#xff09;#xff1a;工具模块封装 封装 axios 模块 封装背景 使用axios发起一个请求是比较简单的事情#xff0c;但是axios没有进行封装复用#xff0c;项目越来越大#xff0c;会引起越来越多的代码冗余 Element UI 实现权限管理系统 前端篇三工具模块封装  封装 axios 模块 封装背景 使用axios发起一个请求是比较简单的事情但是axios没有进行封装复用项目越来越大会引起越来越多的代码冗余让代码变得越来越难维护。所以我们在这里先对 axios 进行二次封装使项目中各个组件能够复用请求让代码变得更容易维护。 封装要点 统一 url 配置统一 api 请求request (请求) 拦截器例如带上token等设置请求头response (响应) 拦截器例如统一错误处理页面重定向等根据需要结合 Vuex 做全局的 loading 动画或者错误处理将 axios 封装成 Vue 插件使用 文件结构 在 src 目录下新建一个 http 文件夹用来存放 http 交互 api 代码。 config.jsaxios 默认配置包含基础路径等信息。axios.js二次封装 axios 模块包含拦截器等信息。interface.js 请求接口汇总模块聚合模块 API。index.js将 axios 封装成插件按插件方式引入。 config.js export default {method: get,// 基础url前缀baseURL: http://localhost:8080/,// 请求头信息headers: {Content-Type: application/json;charsetUTF-8},// 参数data: {},// 设置超时时间timeout: 10000,// 携带凭证withCredentials: true,// 返回数据类型responseType: json } axios.js import axios from axios; import config from ./config; import qs from qs; import Cookies from js-cookie; import router from /router// 使用vuex做全局loading时使用 // import store from /storeexport default function $axios(options) {return new Promise((resolve, reject) {const instance axios.create({baseURL: config.baseURL,headers: {},transformResponse: [function (data) {}]})// request 拦截器instance.interceptors.request.use(config {let token Cookies.get(token)// 1. 请求开始的时候可以结合 vuex 开启全屏 loading 动画// console.log(store.state.loading)// console.log(准备发送请求...)// 2. 带上tokenif (token) {config.headers.accessToken token} else {// 重定向到登录页面router.push(/login)}// 3. 根据请求方法序列化传来的参数根据后端需求是否序列化if (config.method post) {if (config.data.__proto__ FormData.prototype|| config.url.endsWith(path)|| config.url.endsWith(mark)|| config.url.endsWith(patchs)) {} else {config.data qs.stringify(config.data)}}return config},error {// 请求错误时console.log(request:, error)// 1. 判断请求超时if (error.code ECONNABORTED error.message.indexOf(timeout) ! -1) {console.log(timeout请求超时)// return service.request(originalRequest);// 再重复请求一次}// 2. 需要重定向到错误页面const errorInfo error.responseconsole.log(errorInfo)if (errorInfo) {error errorInfo.data // 页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.rejectconst errorStatus errorInfo.status; // 404 403 500 ...router.push({path: /error/${errorStatus}})}return Promise.reject(error) // 在调用的那边可以拿到(catch)你想返回的错误信息})// response 拦截器instance.interceptors.response.use(response {let data;// IE9时response.data是undefined因此需要使用response.request.responseText(Stringify后的字符串)if (response.data undefined) {data JSON.parse(response.request.responseText)} else {data response.data}// 根据返回的code值来做不同的处理switch (data.rc) {case 1:console.log(data.desc)break;case 0:store.commit(changeState)// console.log(登录成功)default:}// 若不是正确的返回code且已经登录就抛出错误// const err new Error(data.desc)// err.data data// err.response response// throw errreturn data},err {if (err err.response) {switch (err.response.status) {case 400:err.message 请求错误breakcase 401:err.message 未授权请登录breakcase 403:err.message 拒绝访问breakcase 404:err.message 请求地址出错: ${err.response.config.url}breakcase 408:err.message 请求超时breakcase 500:err.message 服务器内部错误breakcase 501:err.message 服务未实现breakcase 502:err.message 网关错误breakcase 503:err.message 服务不可用breakcase 504:err.message 网关超时breakcase 505:err.message HTTP版本不受支持breakdefault:}}console.error(err)return Promise.reject(err) // 返回接口返回的错误信息})// 请求处理instance(options).then(res {resolve(res)return false}).catch(error {reject(error)})}) } interface.js import axios from ./axios/* * 将所有接口统一起来便于维护* 如果项目很大可以将 url 独立成文件接口分成不同的模块*/// 单独导出 export const login () {return axios({url: /login,method: get}) }export const getUser () {return axios({url: /user,method: get}) }export const getMenu data {return axios({url: /menu,method: post,data}) }// 默认全部导出 export default {login,getUser,getMenu } index.js // 导入所有接口 import apis from ./interfaceconst install Vue {if (install.installed)return;install.installed true;Object.defineProperties(Vue.prototype, {// 注意此处挂载在 Vue 原型的 $api 对象上$api: {get() {return apis}}}) }export default install 安装 js-cookie 上面 axios.js 中会用到 Cookie 获取 token所以需要把相关依赖安装一下。 执行以下命令安装依赖包。 yarn add js-cookie 代码实例 1.引入插件 在 main.js 中以 vue 插件的形式引入 axios这样在其他地方就可通过 this.$api 调用相关的接口了。 2.编写接口 在 interface.js 中添加 login 接口。 3.调用接口 在登录界面 Login.vue 中添加一个登录按钮点击处理函数通过 axios 调用 login 接口返回数据。 成功返回之后将 token 放入 Cookie 并跳转到主页。 templatediv classpageh2Login Page/h2el-button typeprimary clicklogin()登录/el-button/div /templatescriptimport mock from /mock/mock.js;import Cookies from js-cookie;import router from /routerexport default {name: Login,methods: {login() {this.$api.login().then(function(res) {alert(res.data.token)Cookies.set(token, res.data.token) // 放置token到Cookie router.push(/) // 登录成功跳转到主页}).catch(function(res) {alert(res);});}}} /script 4.mock 接口 在 mock.js 中添加 login 接口进行拦截返回一个 token。 启动测试 浏览器访问http://localhost:8080/#/login显示登录界面。 点击登录按钮首先弹出框显示返回的 token 信息。 点击确定关掉弹出框后跳转到主页。点击用户、菜单按钮接口调用正常。 封装 mock 模块 为了统一可以统一管理和集中控制数据模拟接口我们对 mock 模块进行了封装可以方便的定制模拟接口的统一开关和个体开关。 文件结构 在 mock 目录下新建一个 index.js 创建 modules 目录并在里面创建三个模块 *.js 文件。 index.js模拟接口模块聚合文件 login.js登录相关的接口模拟 user.js用户相关的接口模拟 menu.js菜单相关的接口模拟 index.js import Mock from mockjs import * as login from ./modules/login import * as user from ./modules/user import * as menu from ./modules/menu// 1. 开启/关闭[业务模块]拦截, 通过调用fnCreate方法[isOpen参数]设置. // 2. 开启/关闭[业务模块中某个请求]拦截, 通过函数返回对象中的[isOpen属性]设置. fnCreate(login, true) fnCreate(user, true) fnCreate(menu, true)/*** 创建mock模拟数据* param {*} mod 模块* param {*} isOpen 是否开启?*/ function fnCreate (mod, isOpen true) {if (isOpen) {for (var key in mod) {((res) {if (res.isOpen ! false) {Mock.mock(new RegExp(res.url), res.type, (opts) {opts[data] opts.body ? JSON.parse(opts.body) : nulldelete opts.bodyconsole.log(\n)console.log(%cmock拦截, 请求: , color:blue, opts)console.log(%cmock拦截, 响应: , color:blue, res.data)return res.data})}})(mod[key]() || {})}} } login.js // 登录接口 export function login () {return {// isOpen: false,url: http://localhost:8080/login,type: get,data: {msg: success,code: 0,data: {token: 4344323121398// 其他数据}}} } user.js // 获取用户信息 export function getUser () {return {// isOpen: false,url: http://localhost:8080/user,type: get,data: {msg: success,code: 0,data: {id: increment, name: name, // 随机生成姓名email: email, // 随机生成姓名age|10-20: 12// 其他数据}}} } menu.js // 获取菜单信息 export function getMenu () {return {// isOpen: false,url: http://localhost:8080/menu,type: get,data: {msg: success,code: 0,data: {id: increment, name: menu, // 随机生成姓名order|10-20: 12// 其他数据}}} } 修改引入 Login.vue Home.vue 启动测试 浏览器访问http://localhost:8080/#/按照先前流程走一遍没有问题。

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

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

相关文章

软件开发 --- 快速部署web

软件开发 --- 快速部署web0.安装环境。我这里举例说明,比如,java(后端),phpstudy(集成服务工具,包含mysql,redis,nginx) 1.配置。准备好java,html,sql脚本,用java -jar运行代码, 2.运行

工业级CAD数据优化工具:PiXYZ Studio 2025 图文安装指南

软件介绍 PiXYZ Studio 2025是一款专注于工业级CAD数据准备与优化的专业软件,其核心功能是将来自CATIA、SolidWorks、NX等主流CAD工具的高密度参数化模型,通过先进的镶嵌细分技术转化为轻量化网格,同时支持CATPart、…

BIM建模利器 Tekla Structures 2025 全流程安装指南

软件介绍 Tekla Structures 2025是Trimble公司推出的专业建筑信息建模(BIM)软件,专为结构工程师及建筑全产业链从业者设计。该版本通过智能自动化技术实现跨产品高效协作,支持从概念设计到施工维护的全流程数字化管…

containerd离线安装

Containerd 2.1.4 二进制离线安装指南 准备离线安装包 1. 在有网络的机器上下载二进制文件 # 创建工作目录 mkdir -p /tmp/containerd-binary-offline cd /tmp/containerd-binary-offline# 下载containerd 2.1.4二进制…

网站开发主菜单和子菜单长沙制作公园仿竹围栏厂家电话

1.先更新 mysql 数据, 再手动清除 Redis 缓存 , 最后重新查询最新的数据同步到Redis中,保证最终一致性。 2.更新 mysql 数据, 在采用 mq 异步的形式 同步数据到 Redis 中 。 缺点: 延迟概率就比较大 优点&#xff1a…

餐饮公司网站建设的特点一键网页转app生成器

主要针对英文文献 1 基本环境 连字符 不同长度的"-"表示不同含义。 一个"-"长度的连字符用于词中两个"-"长度的连字符常用于制定范围三个"-"长度的连字符是破折号数学中的负数要用数学环境下的-得到 强调 在正式文章中, 通常不…

蓝潮网站建设上海牛巨仁seo

ChatGPT的背景和发展: ChatGPT是OpenAI公司在GPT-3基础上的进一步升级。GPT(Generative Pre-trained Transformer)是一种基于Transformer架构的深度学习模型,它能够处理自然语言,实现自动对话、写作等任务。而ChatGPT在…

网站后台传不了图片客户评价 网站

第一步:概要 基于深度学习OCR文本识别分为两个模块:DBNet和CRNN。 DBNet是基于分割的文本检测算法,算法将可微分二值化模块(Differentiable Binarization)引入了分割模型,使得模型能够通过自适应的阈值图进行二值化,并…

自己怎么制作一个网站网站上怎么做支付接口

11个按键LCD1602显示器9个灯蜂鸣器打地鼠小游戏就是九个灯泡,对应九个按键,灯泡有红黄蓝,每间隔一会儿就会亮一个灯,代表地鼠冒出来,按一下按键让灯泡灭掉代表打地鼠,红的三分,黄的两分&#xf…

网站服务器干啥公司名字大全四个字

本套课程从虚拟机的发展历史,虚拟机的内存结构,对象的分配与回收以及字节码,类加载等多个方面深入地对Java虚拟机进行了剖析。内容详实,语言通俗易懂。理论结合实践,让学习本套视频的朋友可以更快的理解虚拟机的原理&a…

律师论坛网站模板w9y6新域名

目录 ISOLAR-A介绍 体系结构 特性 架构 Explorers和Views 编辑 Editors

威县网站建设科技小制作怎么做视频网站

目录 1. 前言2. 软件著作权3. 软件使用说明3.1 进入软件3.2 用户登录3.3 首页3.4 报价器3.4.1 总体介绍3.4.2 王者报价器3.4.3 LOL手游报价器3.4.4 英雄联盟报价器3.4.5 云顶之弈报价器3.4.7 王者水晶报价器3.4.8 和平精英报价器3.4.9 蛋仔派对报价器3.4.10 穿越火线报价器3.4.…

Python3 urllib 详解

Python3 urllib 详解在 Python 的网络编程领域,urllib是一个历史悠久且功能完善的标准库,它提供了处理 URL 请求、解析 URL、处理网络异常等一系列功能。与第三方库(如requests)相比,urllib无需额外安装,随 Pyth…

(转)使用 Embarcadero Delphi FMX 应用程序实现多点触控

原文地址:https://www.softacom.com/blog/development/how-to-add-multi-touch-to-an-embarcadero-delphi-fmx-app/

成功案例 网站互联网+营销策略怎么写

练习1编写Order类,有int型的orderId,String型的orderName,相应的getter()和setter()方法,两个参数的构造器, 重写父类的equals()方法:public boolean equals(Object obj),并判断测试类中创建的两…

百度云服务ubtuntu安装docker

1. 更新你的包管理器和安装必要的包 sudo apt-get update sudo apt-get install -y \ ca-certificates \ curl \ gnupg \ lsb-release 2. 添加Docker的官方GPG密钥 curl -fsSL https://download.docker.co…

YKM-1Z-16

YKM-1Z-16YKM:通常是某些厂家的继电器系列代号。1Z:表示触点形式是 单刀双掷 (1 转换触点,SPDT)。16:常常表示 触点的额定电流 16A。👉 综合起来,YKM-1Z-16 就是一个 16A 单刀双掷继电器,常用于工业控制、电气…

景洪服装网站建设网络营销主要学些什么

[css] 如何写高效的CSS? 唔,自动补全、预编译这些辅助手段确实能提升一定的效率, 但我觉得真正能提升效率的是,不看预览就敢上手的理论知识。 见过太多加几行就要预览下效果的开发了,哪怕给他双屏其实也还是会拖慢节奏…

如何用网站做推广网站管理助手4.0破解

前言 在前面例程中谈到了C 通过Snap7开源库S7通信库跟西门子S7-1200PLC/S7-1500PLC以及合信CTMC M226ES PLC/CPU226 PLC通信的方式方法和应用例程。但是遗憾的是Snap7中根据官方资料显示只能访问PLC的 DB区、MB区、C区、T区 、I区、Q区,并没有提到有关如何访问S7-20…

广西建设网站在线服务wordpress更新机制

文章目录 配置文件一、Yaml 文件1.1 修改banner1.2 日志1.3 端口1.4 属性提示消失解决方案 二、Properties 文件三、配置高级3.1 临时属性3.2 临时属性(开发环境)3.3 配置文件四级分类3.3.1 原始配置文件(四级)3.3.2 config目录下…