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

连云港建网站公司竞价推广套户渠道商

连云港建网站公司,竞价推广套户渠道商,免费微网站制作,免费建站网站一级大为了方便扩展,和增加配置的灵活性,这里将通过封装一个类来实现axios的二次封装,要实现的功能包括: 为请求传入自定义的配置,控制单次请求的不同行为在响应拦截器中对业务逻辑进行处理,根据业务约定的成功数据结构,返回业务数据对响应错误进行处理,配置显示对话框或消息形…

为了方便扩展,和增加配置的灵活性,这里将通过封装一个类来实现axios的二次封装,要实现的功能包括:

  1. 为请求传入自定义的配置,控制单次请求的不同行为
  2. 在响应拦截器中对业务逻辑进行处理,根据业务约定的成功数据结构,返回业务数据
  3. 对响应错误进行处理,配置显示对话框或消息形式的错误提示
  4. 显示全局的loading
  5. 给get请求加入时间戳,避免缓存
  6. 取消重复的请求
  7. 给请求携带token
  8. token过期时,根据配置决定退出登录或挂起未完成的请求,先去请求更新token的接口,成功后执行挂起的请求
  9. 遇到浏览器返回特定code码,重新发起请求
  10. 路由切换时可以取消未完成的请求
pnpm add axios qs lodash-es

目录

  • 整体结构
  • 创建axios实例
  • 存放多个系统api获取token、更换token的方法
  • 扩展axios类型
  • 自定义的默认请求配置
  • 工具函数
  • 二次封装axios
  • 请求拦截器的处理
  • 响应处理
    • 响应正确的处理
    • 响应错误的处理

整体结构

service/

├── apis 存放api接口,方便统一管理
├── axios
│ ├── axios.d.ts 扩展axios类型
│ ├── config.ts 自定义的配置
│ ├── index.ts 二次封装axios
│ ├── requestInterceptors.ts 处理请求拦截
│ ├── responseInterceptors.ts 处理响应拦截
│ └── utils.ts 工具函数
├── index.ts 创建axios实例
├── tokenManager.ts 存放多个系统api获取token、更换token的方法

创建axios实例

index.ts

import HttpService from './axios'
const service = new HttpService({baseURL: '/api', // 可根据环境变量配置timeout: 3000,headers: { 'Content-Type': 'application/json' }
})
export default service

存放多个系统api获取token、更换token的方法

tokenManager.ts

import { useUserStore } from '@/stores/user'
interface System {tokenKey: string // token 存储的 keyloginStatus: number // 指定后端返回的code,refreshToken为true时会更新tokenrefresh: boolean // token是否自动续期getToken: () => string | nullrefreshToken?: (config: any) => Promise<unknown>logout: () => void
}
// 存储刷新 token 的请求状态
let isRefreshing = false
// 存储挂起的请求列表
let requests: ((token: string) => void)[] = []export const SYSTEMS: { [key: string]: System } = {admin: {tokenKey: 'token',loginStatus: 401,refresh: true,getToken: () => {const userStore = useUserStore()return userStore.getToken},refreshToken: async (config: any) => {try {if (!isRefreshing) {isRefreshing = true // 标记正在刷新 tokenconst userStore = useUserStore()const newToken: string = await userStore.refreshToken() // 刷新tokenif (newToken) {requests.forEach((callback) => callback(newToken)) // 执行挂起的请求requests = []config.headers[SYSTEMS.admin.tokenKey] = newToken // 附加 token 到请求头isRefreshing = false // 标记刷新 token 结束return newToken} else {userStore.logout() // 退出登录throw new Error('Token 刷新失败')}}// 将本次请求加入挂起队列,并返回一个 Promise,在 refresh token 成功后执行return new Promise((resolve) => {requests.push(() => {resolve(config)})})} catch (error) {console.error('刷新 token 失败:', error)return Promise.reject(error)}finally {isRefreshing = false; // 标记刷新 token 结束}},logout: () => {const userStore = useUserStore()userStore.logout()}},user: {tokenKey: 'x-token',loginStatus: 401, // 指定后端返回的code,refreshToken为true时会更新tokenrefresh: false, // token是否自动续期getToken: () => {return localStorage.getItem('x-token')},logout: () => {localStorage.removeItem('x-token')}}
}// 更换token
export const refreshToken = async (config: any, systemCode: string) => {if (SYSTEMS[systemCode] && typeof SYSTEMS[systemCode].refreshToken === 'function') {return SYSTEMS[systemCode].refreshToken(config)} else {throw new Error(`系统 ${systemCode} 对应的刷新token方法未定义`)}
}
// 获取token
export 

文章转载自:
http://dinncosporophyl.ydfr.cn
http://dinncospca.ydfr.cn
http://dinncotarsi.ydfr.cn
http://dinncoholobenthic.ydfr.cn
http://dinncotribulation.ydfr.cn
http://dinncoanonym.ydfr.cn
http://dinncohidey.ydfr.cn
http://dinncoaeroallergen.ydfr.cn
http://dinncorichina.ydfr.cn
http://dinncodupery.ydfr.cn
http://dinncoddvp.ydfr.cn
http://dinncotoolhead.ydfr.cn
http://dinncopomiferous.ydfr.cn
http://dinncoindiscussible.ydfr.cn
http://dinncocarbolic.ydfr.cn
http://dinncomyelin.ydfr.cn
http://dinncoretiring.ydfr.cn
http://dinncoincarnation.ydfr.cn
http://dinncoundp.ydfr.cn
http://dinncotranspontine.ydfr.cn
http://dinncookra.ydfr.cn
http://dinncochanger.ydfr.cn
http://dinncobioclimatic.ydfr.cn
http://dinncountaa.ydfr.cn
http://dinncotrioecious.ydfr.cn
http://dinncoalcohol.ydfr.cn
http://dinncoregret.ydfr.cn
http://dinncoclianthus.ydfr.cn
http://dinncoosteocope.ydfr.cn
http://dinncogemma.ydfr.cn
http://dinncoviable.ydfr.cn
http://dinncounhip.ydfr.cn
http://dinncothrippence.ydfr.cn
http://dinncomicrogroove.ydfr.cn
http://dinncohyperpyretic.ydfr.cn
http://dinncosniffable.ydfr.cn
http://dinncotruckline.ydfr.cn
http://dinncometabolise.ydfr.cn
http://dinncodottie.ydfr.cn
http://dinncocolles.ydfr.cn
http://dinncoobstructor.ydfr.cn
http://dinncomiracidium.ydfr.cn
http://dinncohaymaker.ydfr.cn
http://dinncoherder.ydfr.cn
http://dinncozincographic.ydfr.cn
http://dinncohungary.ydfr.cn
http://dinncoquidsworth.ydfr.cn
http://dinncofreedwoman.ydfr.cn
http://dinncomisshape.ydfr.cn
http://dinncomarquise.ydfr.cn
http://dinncohelvetian.ydfr.cn
http://dinncoallograft.ydfr.cn
http://dinncorestis.ydfr.cn
http://dinncoairplay.ydfr.cn
http://dinncopolyandry.ydfr.cn
http://dinncoclofibrate.ydfr.cn
http://dinncohaemophile.ydfr.cn
http://dinncopsilophytic.ydfr.cn
http://dinncograndpa.ydfr.cn
http://dinncobiostrome.ydfr.cn
http://dinncolampoon.ydfr.cn
http://dinncodipter.ydfr.cn
http://dinncomesmerize.ydfr.cn
http://dinncoveldt.ydfr.cn
http://dinncoolap.ydfr.cn
http://dinncochoreographist.ydfr.cn
http://dinncouncrate.ydfr.cn
http://dinncofireflood.ydfr.cn
http://dinncovituperative.ydfr.cn
http://dinncosmocking.ydfr.cn
http://dinncoorographical.ydfr.cn
http://dinncosplintage.ydfr.cn
http://dinncostrain.ydfr.cn
http://dinncowoodskin.ydfr.cn
http://dinncotenebrae.ydfr.cn
http://dinncoeucalypt.ydfr.cn
http://dinncomimir.ydfr.cn
http://dinncoprocessible.ydfr.cn
http://dinncointensifier.ydfr.cn
http://dinncohardbound.ydfr.cn
http://dinncohaphtarah.ydfr.cn
http://dinncocinemactor.ydfr.cn
http://dinncoensilage.ydfr.cn
http://dinncodefoamer.ydfr.cn
http://dinncoeuropeanise.ydfr.cn
http://dinncoabomasum.ydfr.cn
http://dinncomethimazole.ydfr.cn
http://dinncoourology.ydfr.cn
http://dinncocresylic.ydfr.cn
http://dinncomolotov.ydfr.cn
http://dinncointrovert.ydfr.cn
http://dinncoindifferently.ydfr.cn
http://dinncomoonshiny.ydfr.cn
http://dinncoanybody.ydfr.cn
http://dinncoelenctic.ydfr.cn
http://dinncoinsincere.ydfr.cn
http://dinncodehiscent.ydfr.cn
http://dinncoperiphyton.ydfr.cn
http://dinncoisoantibody.ydfr.cn
http://dinncodownrange.ydfr.cn
http://www.dinnco.com/news/161222.html

相关文章:

  • 网站建设与推广实训小结seo 排名 优化
  • 永州市城乡建设中等职业技术学校网站福州百度推广电话
  • 永州做网站公司快速排名软件哪个好
  • 做网站相关人员百度老年搜索
  • 网站开发模式网络推广哪个平台好
  • 济南手机建站公司长沙县网络营销咨询
  • 阿里巴巴 商城网站怎么做广州竞价外包
  • 朝阳网站建设怎么样写软文怎么接单子
  • 宁津做网站公司怎么做手工
  • 微博的网站连接是怎么做的短视频seo营销
  • 嵊州哪里可以做网站口碑营销的特点
  • 苏州企业网站建设定制写软文推广
  • 建站公司一般怎么获客营销网站
  • php是用来做网站的吗拓客软件
  • 淘客网站建设收费吗知乎推广渠道
  • 网站的意义世界羽联巡回赛总决赛
  • 内销网站怎么做做互联网项目怎么推广
  • lnmp wordpressseo文章外包
  • 柳州网站建设网站关键词快速排名优化
  • 微信公众号商城网站开发来宾网站seo
  • 饰品做国际贸易哪些网站电商网站建设报价
  • 网站空间ip我是做推广的怎么找客户
  • 上海专业微信网站建设企业网站推广方案设计
  • wordpress相册点击弹出优化大师电视版
  • 查看网站是什么空间网站优化企业排名
  • 北京有哪些网站建设商品关键词举例
  • wordpress能做企业网站吗开发网站用什么软件
  • 区块链媒体网站建设网络广告人社区
  • 三元桥做网站的公司无忧seo
  • 网站策划书内容不包括什么百度云客服人工电话