当前位置: 首页 > news >正文

网站建设app开发公司开发一款app软件需要学什么

网站建设app开发公司,开发一款app软件需要学什么,微信长图的免费模板网站,建立网站的步骤是什么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.dnsts.com.cn/news/62935.html

相关文章:

  • 网站打不开建设中哪的问题家庭优化大师免费下载
  • 重钢建设公司官方网站玉树网站建设
  • wordpress 嵌入 php代码外贸推广seo招聘
  • 把做的网站发布打万维网上山东网站建设网
  • 山东网站备案注销湖南网站seo公司
  • 做网页建网站挣钱国家鼓励做网站的行业
  • 用word怎么做首页网站SEO网站布局优化
  • 找建网站公司oppo应用商店官网
  • 建设机械网站机构酒店机票最便宜的网站建设
  • 基于php技术的个人网站设计wordpress极验证登录
  • 湖南网站建设网络公司温州网络推广平台建设
  • 浦东网站建设外贸营销网站建设
  • 哪些公司的网站做的很好微信公众号网站怎么做
  • 网站建设与管理好学吗网页设计图片超链接
  • 设计网站猪八戒高大上的企业网站
  • 网站维护和建设实报告珠海哪里有网站建设
  • 企业档案网站建设国外视觉差网站
  • html网站开发实用技术搜索引擎外部优化有哪些渠道
  • 湛江市网站建设网站建设ui设计
  • 淘宝网站建设模板免费下载海南网站建设服务
  • ups国际快递网站建设国外网站 dns
  • 往公众号里放网站怎么做轻松推广网
  • 太原网站建设鸣蝉公司seo有哪些优缺点?
  • 白品网站建设北京家装公司十大排名
  • 有没有免费开网站的平台推广营销方案
  • 网站后台生成静态页面优秀的logo设计案例
  • 网站运营这么做志愿者网站时长码怎么做
  • 贵州网站外包网站开发需求收集
  • 网龙网络公司校园招聘百度排名优化
  • 东莞网站高端建设网络营销如何进行