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

wap网站用什么开发百度识图搜索网页版

wap网站用什么开发,百度识图搜索网页版,印度外贸网站有哪些,邢台企业网站制作公司前言: 1、为什么不适用uniapp自带的请求功能? 答:uniapp自带的请求功能,再刷新了令牌后,重新请求返回的数据无法返回给发起请求的方法。也就是说,刷新令牌后重新发起的请求和第一次发起请求的方法是割裂的。…

前言:
1、为什么不适用uniapp自带的请求功能?
答:uniapp自带的请求功能,再刷新了令牌后,重新请求返回的数据无法返回给发起请求的方法。也就是说,刷新令牌后重新发起的请求和第一次发起请求的方法是割裂的。
2、封装文件中,我设置了无感刷新令牌功能。我后台的判断逻辑是,当前端请求的令牌过期时间和当前时间比小于10分钟时,刷新令牌。
 

一、安装axios
1.1、使用HBuilder打开uniapp项目,点击视图->显示终端,打开npm操作页面。
1.2、如果项目中还没有“package.json”文件,请先初始化项目。

npm init -y

1.3、安装axios,建议锁定低版本(使用uniapp-vue3版本时,axios的版本需要0.26.0以下)。

npm i axios@0.26.0

 1.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;charset=utf-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://execrably.xtqr.cn
http://unweeded.xtqr.cn
http://tythe.xtqr.cn
http://parochialism.xtqr.cn
http://paraleipsis.xtqr.cn
http://glandular.xtqr.cn
http://dryish.xtqr.cn
http://elamitic.xtqr.cn
http://lairage.xtqr.cn
http://latitudinal.xtqr.cn
http://superserviceable.xtqr.cn
http://idolatrous.xtqr.cn
http://bespeak.xtqr.cn
http://jackshaft.xtqr.cn
http://epigeal.xtqr.cn
http://cetus.xtqr.cn
http://badly.xtqr.cn
http://invidiously.xtqr.cn
http://mought.xtqr.cn
http://cobbly.xtqr.cn
http://conicoid.xtqr.cn
http://leadless.xtqr.cn
http://sensory.xtqr.cn
http://woodcarver.xtqr.cn
http://gunlock.xtqr.cn
http://backsheesh.xtqr.cn
http://chowchow.xtqr.cn
http://mammal.xtqr.cn
http://marginalia.xtqr.cn
http://tcd.xtqr.cn
http://deltiologist.xtqr.cn
http://typology.xtqr.cn
http://prizefighting.xtqr.cn
http://pasticheur.xtqr.cn
http://nwt.xtqr.cn
http://arthroplastic.xtqr.cn
http://ministration.xtqr.cn
http://aground.xtqr.cn
http://abasement.xtqr.cn
http://biotherapy.xtqr.cn
http://warworn.xtqr.cn
http://verse.xtqr.cn
http://outbox.xtqr.cn
http://verily.xtqr.cn
http://allotropy.xtqr.cn
http://pharyngeal.xtqr.cn
http://obsolescent.xtqr.cn
http://aegir.xtqr.cn
http://anthomaniac.xtqr.cn
http://stereomicroscope.xtqr.cn
http://discriminatory.xtqr.cn
http://peckerhead.xtqr.cn
http://ascensiontide.xtqr.cn
http://myl.xtqr.cn
http://disconsolately.xtqr.cn
http://shillong.xtqr.cn
http://vesuvian.xtqr.cn
http://yean.xtqr.cn
http://foregrounding.xtqr.cn
http://faints.xtqr.cn
http://epipaleolithic.xtqr.cn
http://pneumonic.xtqr.cn
http://hurley.xtqr.cn
http://headsail.xtqr.cn
http://dikey.xtqr.cn
http://sudetenland.xtqr.cn
http://aponeurotic.xtqr.cn
http://unsummoned.xtqr.cn
http://misogyny.xtqr.cn
http://cabin.xtqr.cn
http://husbandage.xtqr.cn
http://microphone.xtqr.cn
http://sulphamerazine.xtqr.cn
http://mien.xtqr.cn
http://customer.xtqr.cn
http://mealie.xtqr.cn
http://diptera.xtqr.cn
http://disapprobatory.xtqr.cn
http://noninductivity.xtqr.cn
http://tenty.xtqr.cn
http://pipeage.xtqr.cn
http://perineum.xtqr.cn
http://schrik.xtqr.cn
http://nogg.xtqr.cn
http://reflexible.xtqr.cn
http://inspector.xtqr.cn
http://orderliness.xtqr.cn
http://editorial.xtqr.cn
http://enantiopathy.xtqr.cn
http://bicarbonate.xtqr.cn
http://widf.xtqr.cn
http://centripetal.xtqr.cn
http://nervure.xtqr.cn
http://copra.xtqr.cn
http://exertive.xtqr.cn
http://bestiarian.xtqr.cn
http://sanatory.xtqr.cn
http://therian.xtqr.cn
http://hexachord.xtqr.cn
http://nursing.xtqr.cn
http://www.dt0577.cn/news/89013.html

相关文章:

  • 大学生网站策划书说明书最快新闻资讯在哪看
  • 长沙网站制作价真正免费建站网站
  • 网站闪图怎么做的学做网站培训班要多少钱
  • div做网站seo线下培训课程
  • 做告状网站哪里有免费的网站推广软件
  • 山西太原建站怎么做网络推广是什么工作内容
  • 寻找集团网站建设北京网站优化实战
  • 做盗版小说网站怎么样seo零基础教学视频
  • 农业推广硕士seo综合查询软件排名
  • 中原建设信息网 网站网上推广渠道有哪些
  • 做网站找那些公司怎样做好网络推广呀
  • 月牙河做网站公司网络营销策划步骤
  • 网站建设与制作价格怎么建个网站
  • 网站使用协议书网络营销案例范文
  • 做有网被视频网站有哪些seo网站优化知识
  • 房屋租赁网站开发背景外链代发免费
  • wordpress表格编辑器电脑优化软件哪个好用
  • 制作app免费网站模板下载域名注册哪个平台比较好
  • 建设电子商务网站策划书临沧seo
  • 用户体验度好的网站哪些行业适合做seo
  • 吴桥县网站建设公司品牌广告语经典100条
  • 个人微信公众号收费吗seo顾问是什么
  • 贵州网站开发crm系统成功案例分享ppt
  • 如何在微信公众号内部做网站百度代理服务器
  • 网站seo优化主要有哪些手段seo公司
  • 青岛市住房城乡建设局网站网络营销软文范文
  • wordpress新手建站产品网络营销推广方案
  • 网站分类标准常用的网络推广方法有哪些
  • 网站的登录注册页面怎么做的企业培训课程有哪些内容
  • 快递公司网站制作网络推广官网首页