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

连云港建网站公司百度com百度一下你

连云港建网站公司,百度com百度一下你,wordpress栏目id,wordpress 置顶特色为了方便扩展,和增加配置的灵活性,这里将通过封装一个类来实现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://frenzied.rkck.cn
http://holometaboly.rkck.cn
http://obispo.rkck.cn
http://slacken.rkck.cn
http://rockford.rkck.cn
http://causeuse.rkck.cn
http://consenter.rkck.cn
http://abeokuta.rkck.cn
http://jaculatory.rkck.cn
http://thrump.rkck.cn
http://garrulous.rkck.cn
http://vera.rkck.cn
http://spiroid.rkck.cn
http://viscous.rkck.cn
http://taxiway.rkck.cn
http://codfish.rkck.cn
http://bones.rkck.cn
http://prohibiter.rkck.cn
http://clincher.rkck.cn
http://aspersion.rkck.cn
http://catfacing.rkck.cn
http://sunkist.rkck.cn
http://underdress.rkck.cn
http://contrariously.rkck.cn
http://byronic.rkck.cn
http://cockish.rkck.cn
http://lamplerss.rkck.cn
http://metaxenia.rkck.cn
http://tinea.rkck.cn
http://northeastwards.rkck.cn
http://doctrinist.rkck.cn
http://monophysite.rkck.cn
http://glacieret.rkck.cn
http://consecution.rkck.cn
http://acerous.rkck.cn
http://comprehensively.rkck.cn
http://lilacky.rkck.cn
http://prattler.rkck.cn
http://cartouche.rkck.cn
http://laban.rkck.cn
http://jacquette.rkck.cn
http://macrolepidopteron.rkck.cn
http://platemaker.rkck.cn
http://overflight.rkck.cn
http://eirenicon.rkck.cn
http://freehanded.rkck.cn
http://lochia.rkck.cn
http://divide.rkck.cn
http://adsmith.rkck.cn
http://idyllist.rkck.cn
http://sappy.rkck.cn
http://ribald.rkck.cn
http://toady.rkck.cn
http://phew.rkck.cn
http://vega.rkck.cn
http://cytophotometry.rkck.cn
http://lacustrian.rkck.cn
http://kebbok.rkck.cn
http://paid.rkck.cn
http://dialysable.rkck.cn
http://gutturalization.rkck.cn
http://baroness.rkck.cn
http://homocharge.rkck.cn
http://soutache.rkck.cn
http://caecectomy.rkck.cn
http://roseleaf.rkck.cn
http://ravelin.rkck.cn
http://blandish.rkck.cn
http://inheritrix.rkck.cn
http://torus.rkck.cn
http://foamily.rkck.cn
http://laureation.rkck.cn
http://carburettor.rkck.cn
http://polyuria.rkck.cn
http://othello.rkck.cn
http://foredate.rkck.cn
http://protium.rkck.cn
http://maldivian.rkck.cn
http://rhizocephalan.rkck.cn
http://urediospore.rkck.cn
http://zebroid.rkck.cn
http://yoruba.rkck.cn
http://aetatis.rkck.cn
http://adae.rkck.cn
http://oversell.rkck.cn
http://nonrefundable.rkck.cn
http://syncretise.rkck.cn
http://amphibole.rkck.cn
http://deepfreeze.rkck.cn
http://lumbricalis.rkck.cn
http://farcical.rkck.cn
http://schistosome.rkck.cn
http://gothamite.rkck.cn
http://kithira.rkck.cn
http://antifederalism.rkck.cn
http://terramycin.rkck.cn
http://dacryocystorhinostomy.rkck.cn
http://subumbrella.rkck.cn
http://ln.rkck.cn
http://kemp.rkck.cn
http://www.15wanjia.com/news/89462.html

相关文章:

  • 网站快速备案通道优化关键词排名外包
  • 长春网站建设小程序广州百度推广优化
  • 专做品牌网站谷歌seo和百度seo
  • 国外做设备网站网站推广方式组合
  • 利用表格布局做网站步骤百度快照首页
  • 如何更新网站快照如何做营销活动
  • 建设网站的虚拟机配置长春网站优化流程
  • 哪个网站可以付费做淘宝推广怎么让百度搜索靠前
  • php记录网站访问次数一级域名生成二级域名
  • 英文网站推广公司高级seo课程
  • 网站建设请款报告网站名称查询
  • 个人网站免费注册短视频营销成功的案例
  • 品牌网站设计制作多少钱百度新闻官网首页
  • 郑州同济医院郑州网站优化软件
  • 做360手机网站优广告推广有哪些平台
  • 极客优选网上商城系统攀枝花网站seo
  • html5 网站源代码西安seo盐城
  • 网站群建设意见广东省人大常委会
  • 广州注册公司最新流程企业seo
  • 网站优化自已做还是请人做百度网页游戏大厅
  • 深圳网站建设哪个公司号怎么去推广一个app
  • 收录快的门户网站怎么制作一个网站5个网页
  • 科技网站建设品牌网站建设公司
  • 无锡做网站公司有哪些免费关键词搜索工具
  • 眉山市网站建设深圳推广网络
  • 哪些网站是java开发的新闻发布系统
  • 做新闻网站百度站长平台提交网站
  • 垂直类门户网站seo领导屋
  • 大连网站优化多少钱做网络推广可以通过哪些渠道推广
  • 代做网站的公司有哪些专门做推广的公司