【陪诊系统-PC管理端】axios的二次封装

二次封装axios

  1. 引入axios
  2. 创建axios实例,添加配置信息,这里主要设置基础url和请求超时时间
  3. 给上述创建的实例添加拦截器,对请求、响应分别进行拦截
    根据接口文档显示,当登录成功后,每次请求陪诊师、订单信息都需要携带token,所以在后续请求发送前需要在请求头上添加上这个token(token是登录成功后,服务端返回的,然后被存储到本地)
  4. 请求拦截:设置白名单,因为在登录成功前的注册(获取验证码和验证验证码、登录),是不需要携带token的,所以将它排除
  5. 响应拦截:根据返回的响应数据(状态码)进行判断,看看是否数据异常,然后给出相应操作

request.js

javascript 复制代码
import axios from 'axios'
import { ElMessage } from 'element-plus'

const http = axios.create({
    baseURL: 'https:/v3pz.itndedu.com/v3pz',
    timeout: 10000,
    headers: { 'X-Custom-Header': 'foobar' }
});

// 添加拦截器
// 添加请求拦截器
http.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // token作用户鉴权
    const token = localStorage.getItem('pz_token')
    // 不需要添加token的api
    const whiteUrl = ['/get/code', '/user/authentication', '/login']
    if (token && !whiteUrl.includes(config.url)) {
        config.headers['X-token'] = token
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
http.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    // 对接口异常的数据 给用户提示
    if (response.data.code === -1) {
        ElMessage.warning(response.data.message)
    }
    if (response.data.code === -2) {
        // token错误 清楚缓存
        localStorage.removeItem('pz_token')
        localStorage.removeItem('pz_userInfo')
        localStorage.removeItem('pz_v3pz')
        //window.location.orgin 当前页面路由
        window.location.href = window.location.orgin
    }
    return response;
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
});

export default http

接口文件

使用二次封装后的axios进行请求,在api.js中定义所有的请求函数,最后到具体的某个地方再调用

javascript 复制代码
import request from '../utils/request'

// 发送验证码
export const getCode = (data) => {
    //发送post请求 data是参数
    return request.post('/get/code', data)
}
// 注册用户
export const UserAuthentication = (data) => {
    return request.post('/user/authentication', data)

}
// 登录
export const login = (data) => {
    return request.post('/login', data)
}
// 权限管理
export const authAdmin = (params) => {
    return request.get('/auth/admin', { params })
}

具体调用

具体某个功能组件中调用api中的对应接口来发送真正的请求,这里在登录界面调用获取验证码请求。

javascript 复制代码
import {getCode,UserAuthentication,login,menuPermissions} from '../../api'

getCode({tel:loginForm.userName}).then((data)=>{
        // console.log('data',data);
        if(data.code === 10000){
            ElMessage.success('发送成功')
        }
    })

文件结构

that's all!

相关推荐
HSunR7 分钟前
ruoyi 若依 自定义注解 参数校验
java·前端·数据库
拆房老料1 小时前
ONLYOFFICE也能像Microsoft Word和WPS一样分别设置中西文字体
前端·html·word·开源软件·wps
Solis程序员1 小时前
Stripe 幂等表:把「不确定的重试」变成「查表返回」
前端·安全·bootstrap·php·agent
李纲明2 小时前
WordPress 站点变慢:按 TTFB → 缓存 → 查询 → 前端 分层排查(含配置注意)
前端·缓存·性能优化·wordpress·后端开发
程序人生8882 小时前
PDF 转 Word 版式错乱、表格丢失?DocConverter Web 格式互转引擎的保真实践
前端·人工智能·opencv·机器学习·pdf·word
粥里有勺糖3 小时前
安利一下最近用的桌面“Agent” | T3 Code
前端·github·ai编程
xy34533 小时前
Axure 9.0 动态面板基本操作
前端·ui·html·axure·原型·产品设计
不停喝水3 小时前
【前端转全栈java速通课】 项目实战④7-11节 操作数据库-登录-注册-修改密码-注销-mubatis-plus简化crud-
java·前端·数据库
一水鉴天4 小时前
统一对象拓扑(UOT)设计全链定稿:从三件事分离到三继承 之1 20261010(豆包“查看聊天内容”继续)
前端·css
栖凤4 小时前
Java 的 try-catch 在 Agent 里失效了,我用了 5 个模式才兜住
java·前端·python