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

农家乐网站 建设做网站ceo

农家乐网站 建设,做网站ceo,手机网站 幻灯片js,建设营销型网站的目的有哪些为了方便扩展,和增加配置的灵活性,这里将通过封装一个类来实现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://www.yayakq.cn/news/112373/

相关文章:

  • 信息流广告投放流程东莞做网站优化天助网络
  • 深圳网站建设三把火科技有关学校网站建设策划书
  • 网站怎么防采集微信公众号怎样做淘客网站
  • 网站推广对接网页修改和编辑的软件有哪些
  • 聊城做网站信息包头哪里做网站
  • 分析北师大教育学原理网站建设网站制作案例价格
  • 北京工程建设信息网站余姚网站定制
  • 重庆巴南区网站开发去哪儿网站排名怎么做
  • 织梦调用网站名称WordPress网易云插卡
  • 宿迁网站搭建单位网站建设开发公司
  • 合肥中小企业网站制作在哪建网站
  • 网站制作费用低商标设计网站排行
  • 做网站用什么配置的vpsWordpress有用么
  • 主页值得是网站的主要内容所在页建筑公司名字大全20000个
  • 静海县建设局网站长丰县建设局网站
  • 有没有做q版头像的网站东莞seo网站排名优化
  • 利用帝国cms网站建设网页游戏排行榜前十平台
  • 坤和建设 网站青岛建设公司网站
  • 天津公司建设网站wordpress 图灵机器人
  • 深圳专业做网站排名多少钱服装网站建设规划书范文
  • 免费的网站申请深圳建网站服务
  • 网站开发的合同范本直播网站建设需要多少钱
  • 图书馆门户网站建设的意义如何使用wordpress插件
  • 网站logo名词解释适合企业做外贸的几个网站
  • 万宁市住房和城乡建设厅网站饿了吗外卖网站怎么做
  • 南宁网站建设q.479185700強深圳品牌模板网站建设
  • h5网站做微信小程序励志响亮的建筑公司名
  • 多种语言网站制作手机app免费开发软件
  • 设计公司官方网站dnf怎么做盗号网站
  • 视觉营销网站建设规划分析河北石家庄网站建设