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

合肥手机网站制作建设服务器安全狗

合肥手机网站制作建设,服务器安全狗,最新的购物网站 开,可以做动漫的网站有哪些前言#xff1a; 1、为什么不适用uniapp自带的请求功能#xff1f; 答#xff1a;uniapp自带的请求功能#xff0c;再刷新了令牌后#xff0c;重新请求返回的数据无法返回给发起请求的方法。也就是说#xff0c;刷新令牌后重新发起的请求和第一次发起请求的方法是割裂的。…前言 1、为什么不适用uniapp自带的请求功能 答uniapp自带的请求功能再刷新了令牌后重新请求返回的数据无法返回给发起请求的方法。也就是说刷新令牌后重新发起的请求和第一次发起请求的方法是割裂的。 2、封装文件中我设置了无感刷新令牌功能。我后台的判断逻辑是当前端请求的令牌过期时间和当前时间比小于10分钟时刷新令牌。   一、安装axios 1.1、使用HBuilder打开uniapp项目点击视图-显示终端打开npm操作页面。 1.2、如果项目中还没有“package.json”文件请先初始化项目。 npm init -y1.3、安装axios建议锁定低版本使用uniapp-vue3版本时axios的版本需要0.26.0以下。 npm i axios0.26.01.4 在main.js中配置axios import axios from axios//引入axios import * as request from /common/api/request.js//自定义请求封装文件 Vue.prototype.$http request //封装的请求方法// 解决uniapp 适配axios请求避免报adapter is not a function错误 // 此配置也可以放在自定义请求封装文件中例如 request.js axios.defaults.adapter config {return new Promise((resolve, reject) {let settle require(axios/lib/core/settle);let buildURL require(axios/lib/helpers/buildURL);uni.request({method: config.method.toUpperCase(),url: config.baseURL buildURL(config.url, config.params, config.paramsSerializer),header: config.headers,data: config.data,dataType: config.dataType,responseType: config.responseType,sslVerify: config.sslVerify,complete: function complete(response) {response {data: response.data,status: response.statusCode,errMsg: response.errMsg,header: response.header,config: config};settle(resolve, reject, response);}})}) }二、自定义请求封装文件 request.js我的文件路径是 /根目录/common/api/request.js。 import axios from axios // 引入axios import store from /store/index.js//引入store仓库function getToken() { //获取令牌let token store.state.accountValue.accessToken //store仓库中的令牌if (!token) { //令牌不存在显示登录弹窗openLoginDialog()}return token }//令牌过期刷新令牌请求 function refreshToken() {return service.get(/account/user/refresh/login).then(res res) }//设置store及微信缓存中的账号信息 function setAccountInfo(accountInfo) {store.commit(accountValue/SET_ACCOUNT_INFO, accountInfo) //修改store中的账号信息//存储账号信息到微信缓存中wx.setStorage({key: userInfo,data: JSON.stringify(accountInfo)}) }axios.defaults.headers[Content-Type] application/json;charsetutf-8 // 创建axios实例 const baseUrl store.state.constantValue.hostUrl store.state.constantValue.port //域名/地址公共前缀 const appid store.state.constantValue.appid //小程序的appid const requestTimeout store.state.constantValue.requestTimeout //默认的请求超时时间单位毫秒 const service axios.create({baseURL: baseUrl, //axios的默认请求地址前缀timeout: requestTimeout //默认的请求超时时间单位毫秒 })let requests [] // 重试队列数组把需要刷新令牌的请求都放入这个数组中每一项将是一个待执行的函数形式let common {//默认的请求配置信息data: {},header: {Content-Type: application/json,Content-Type: application/x-www-form-urlencoded},method: GET,dataType: json }// 请求拦截器 service.interceptors.request.use(config {// 每次发送请求之前判断vuex中是否存在token// 如果存在则统一在http请求的headers都加上token这样后台根据token判断你的登录情况// 即使本地存在token也有可能token是过期的所以在响应拦截器中要对返回状态进行判断config.method config.method || common.method;if (config.method ! GET) {config.data config.data || common.data;}config.dataType config.dataType || common.dataType;config.header config.header || common.header;if (config.header.NeedToken NEED) { //如果需要访问令牌const token getToken();!isNull(token) (config.headers.Authorization Bearer token);}return config;},error {return Promise.error(error);});// 响应拦截器 service.interceptors.response.use(response {// 如果返回的状态码为200说明接口请求成功可以正常拿到数据// 否则的话抛出错误if (response.status 200) {let code response.data.code //code为自定义的后台响应codeif (code 20009 || code 20010) { //未登录或者登录异常需要重新登录时openLoginDialog()//打开登录弹窗return Promise.resolve(response.data); //返回响应结果} else {if (code 20017) { //后台要求刷新令牌const config response.configif (!store.state.constantValue.isRefreshing) { //如果正在刷新令牌状态为false//设置正在刷新令牌状态为true进入更新令牌阶段store.commit(constantValue/SET_IS_REFRESHING, true)//获取刷新令牌请求return refreshToken().then(res {if (res.code 20000) {// 刷新令牌成功设置store及微信缓存中的账号信息const accountInfo res.datasetAccountInfo(accountInfo)//已经刷新了令牌重新发起重试队列数组中的请求requests.forEach(cb cb(accountInfo.accessToken))// 完成后清空这个数组requests []//重置当前请求的配置重新发起请求config.headers.Authorization Bearer accountInfo.accessTokenconfig.baseURL baseUrl //axios的默认请求地址前缀config.timeout requestTimeout //默认的请求超时时间return service(config) //重新发起请求返回的就是当前请求} else {openLoginDialog()//打开登录弹窗}}).catch(rej { //令牌刷新发生错误openLoginDialog()//打开登录弹窗}).finally(() {//完成之后设置正在刷新令牌状态为falsestore.commit(constantValue/SET_IS_REFRESHING, false)})} else { //如果正在刷新令牌状态为trueif (config.header.NeedToken NEED) { //请求需要令牌// 返回一个未执行resolve的promisereturn new Promise((resolve) {// 将resolve放进重试队列数组用一个函数形式来保存等令牌刷新后直接执行requests.push((token) {config.headers.Authorization Bearer tokenresolve(service(config))})})}}}return Promise.resolve(response.data) //返回响应信息}} else { //状态码不为200时return Promise.reject(response.data) //返回响应异常信息}},error {return Promise.reject(error) //返回响应错误信息} );export default service;
http://www.zqtcl.cn/news/577673/

相关文章:

  • 个人网站有什么内容广西网站建设推广
  • 安徽教育云网站建设网站seo诊断的主要内容
  • 网站建设例子开发工具宏怎么使用
  • 新乡做网站公司哪个地区网站建设好
  • 网站模板怎么编辑网站定制化
  • 利于优化的网站网络科技公司怎么赚钱
  • 制作网站的步骤和方法做物流的网站有哪些功能
  • vs做网站图片明明在文件夹里却找不到中国建筑网官网找客户信息
  • WordPress仿站培训黑龙江新闻夜航
  • 如何利用开源代码做网站济南做网站互联网公司有哪些
  • 生意网app下载官网郑州做网站优化公
  • wordpress网站更换域名wordpress 小工具定制
  • 上海做机床的公司网站设计网站怎样做色卡
  • 一个网站怎么绑定很多个域名做网站后台应该谁来做
  • 跑纸活做网站加大门户网站安全制度建设
  • 多商户开源商城seo对网店的作用有哪些
  • 提供微信网站建设福州seo建站
  • 泉州市住房与城乡建设网站潍坊网站建设方案外包
  • 网络文化经营许可证怎么申请免费seo提交工具
  • 网站建设 需求分析报告手机网站微信网站开发
  • 做司法考试题目的网站建站中企动力
  • 做360网站优化ppt模板免费下载千图网
  • 网站域名哪些后缀更好项目推广平台有哪些
  • 做游戏特效的网站网站开发中安全性的防范
  • 阿里云网站建设好用吗齐诺网站建设
  • 中小企业网站建设行情嘉兴公司的网站设计
  • 做服装有哪些好的网站台州网站建设多少钱
  • 任县网站建设公司北京网站开发网站开发公司
  • 重庆seo网站策划网站的tdk指的是什么
  • 自做刷赞网站山东东成建设咨询有限公司网站