南充能够建设网站的公司有山东住房与城乡建设网站

news/2025/9/24 6:34:03/文章来源:
南充能够建设网站的公司有,山东住房与城乡建设网站,制作一个网站怎么架构,大淘客优惠券网站是怎么做的Vue 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/915088.shtml

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

相关文章

昆山网站建设是什么wordpress 外观自定义

postgresql-物化视图 物化视图创建物化视图刷新物化视图修改物化视图删除物化视图 物化视图 创建物化视图 postgresql使用create materialized view 语句创建视图 create materialized view if not exists name as query [with [NO] data];-- 创建一个包含员工统计信息的物化…

国家企业信用信息公示系统官网站广州的百度推广公司

文章目录一、实验目的二、实验要求三、实验内容1、通配符的使用2、重定向3、管道4、shell变量5、建立下面的脚本,运行并分析输出结果,并给出代码注释。6、编写脚本一、实验目的 1.为文件扩展名使用通配符 2.标准输入、标准输出和标准错误的重定向 3.使…

怎么提交网站地图aso优化公司

本周投稿推荐 SCI • 能源科学类,1.5-2.0(25天来稿即录) • CCF推荐,4.5-5.0(2天见刊) • 生物医学制药类(2天逢投必中) EI • 各领域沾边均可(2天录用&#xff09…

什么是功能型网站郑州高端网站定制

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 在探索人工智能边界时,我们时常惊叹于人类孩童的学习能力 —— 可以轻易地将他人…

名表网站网站设计和经营

在 C 语言中,很多东西都是由我们自己去实现的,例如自定义数组,线程文件操作,排序算法等等,有些复杂的东西实现不好很容易留下不易发现的 bug。而 C为使用者提供了一套标准模板库 STL,其中封装了很多实用的容器&#xf…

收录网站工具淘宝运营去哪里学

java并发编程实战的解释,不够详细,尤其this引用逸出让人理解有些费解,java并发编程实战里面的内容就直接拷贝过来发布:使对象能够在当前作用域之外的代码中使用逸出:当某个不该被发布的对象被发布时,这种情…

番禺区怎么做网站建设凡科轻站小程序怎么样

转载自 哈工大刘挺教授:自然语言处理的十个发展趋势 近日,由中国人工智能学会、阿里巴巴集团 & 蚂蚁金服主办,CSDN、中国科学院自动化研究所承办的第三届中国人工智能大会(CCAI 2017)在杭州国际会议中心盛大开幕…

大学做机器人比赛的网站论坛用c 做的网站怎么打开

假如你的重复容器名称是mysql5 删除已存在的容器:如果你不再需要那个已经存在的名为“mysql5”的容器,你可以删除它。使用下面的命令: docker rm -f mysql5这条命令会强制删除正在运行的容器。一旦容器被删除,你就可以重新使用这个…

idea 做网站登录开网站做商城怎么样

并发编程的模型 并发编程需要解决的两个问题:线程之间如何同步,线程之间如何通信。 线程之间通信:共享内存,消息传递。 共享内存通过线程之间读-写程序的公共状态进行通信。消息传递要通过线程之间主动传递消息进行通信。 线程之间…

iis做网站ui设计的一般流程

感觉Redis变慢了,这些可能的原因你查了没 ?(上) Redis 作为一款业内使用率最高的内存数据库,其拥有非常高的性能,单节点的QPS压测能达到18万以上。但也正因此如此,当应用访问 Redis 时,如果发现响应延迟变…

扬州做企业网站哪家公司好wordpress+作品展

TP-LINK 路由器忘记密码 - 恢复出厂设置 1. 恢复出厂设置2. 创建管理员密码3. 上网设置4. 无线设置5. TP-LINK ID6. 网络状态References 1. 恢复出厂设置 在设备通电的情况下,按住路由器背面的 Reset 按钮直到所有指示灯同时亮起后松开。 2. 创建管理员密码 3. 上网…

孝感个人网站建设大型网站seo

[css] IE(6/7/8/9/10/11/Edge)下的hack写法分别有哪些&#xff1f; IE9以及<IE9: \9;IE8以及>IE8: \0;3.IE7以及<IE7: *;4.IE6:*或_;5.edge不清楚;个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起…

安卓开发简单网站开发代码下载简单的电商网站

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1.概述2.设置属性 - …

网站开发 问题解决网站建设维护费用

题意&#xff1a;给出一些点&#xff0c;求最小的覆盖这些点的矩形的面积。 题解&#xff1a; 枚举下边界&#xff08;是一条边&#xff09;&#xff0c;然后暴力卡壳左右边界&#xff08;点&#xff09;&#xff0c;再暴力上边界&#xff08;点&#xff09;&#xff0c;更新答…

模具机械设备东莞网站建设企业营销型网站

子词嵌入 在英语中&#xff0c;“helps”“helped”和“helping”等单词都是同一个词“help”的变形形式。“dog”和“dogs”之间的关系与“cat”和“cats”之间的关系相同&#xff0c;“boy”和“boyfriend”之间的关系与“girl”和“girlfriend”之间的关系相同。在法语和西…

佛山网站建设工作网站在建设中页面

一、无人机巡检的优势 1. 高效性 覆盖范围广&#xff1a;可快速扫描大范围区域&#xff08;如电力线路、管道、农田等&#xff09;&#xff0c;尤其适合复杂地形&#xff08;山区、沼泽等&#xff09;。 速度快&#xff1a;飞行速度远高于人工巡检&#xff0c;缩短任务周期…

前端网站论文开个跨境电商要多少钱

Hadoop的演进从Hadoop 1到Hadoop 3主要是为了提供更高的效率、更好的资源管理、更高的可靠性以及对更多数据处理方式的支持。下面是Hadoop 1, Hadoop 2, 和 Hadoop 3之间的主要区别和演进的原因&#xff1a; Hadoop 1 特点&#xff1a; 主要包括两大核心组件&#xff1a;HDFS&a…

自贡 网站建设杭州旅游网站建设

文章目录 GPIO权限问题使用Root权限运行应用程序更改GPIO文件的权限使用udev规则自动设置权限监视GPIO与读写GPIO注意事项GPIO权限问题 在Linux系统中,通过sysfs接口操作GPIO时,经常会遇到权限问题,因为默认情况下,访问/sys/class/gpio目录及其文件需要root权限。这可能会…

企业网站建设cms站wordpress滑动切换

概念&#xff1a; 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许在不暴露对象内部状态的情况下捕获和恢复对象之前的状态。该模式通过将对象的状态封装到备忘录中&#xff0c;并将其保存在一个管理者类中&#xff0c;从而实现了对…

南部网站建设和目网站

缓存数据一致性探究 缓存是一种较低成本提升系统性能的方式&#xff0c;自它面世第一天起就备受广大开发者的喜爱。然而正如《人月神话》中的那句经典的“没有银弹”中所说&#xff0c;软件工程的设计没有银弹。 就像每一次发布上线修复问题的同时&#xff0c;也极易引入新的问…