赞
踩
目标:基于axios封装一个请求模块,调用接口时使用
(1) 安装 axios
npm i axios
(2) 新建 src/utils/request.js
模块
import axios from 'axios' import store from '@/store' import router from '@/router' // 超时处理 和 公共路径 const instance = axios.create({ baseURL: '这里写地址', timeout: 5000 }) // 全局注入token /** * 请求拦截器配置 一般用于给请求头设置token * 1. 获取token 我这里是存储在Vuex中 const { token } = store.state.user.profile * 2. 携带token if (token) config.headers.Authorization = `Bearer ${token}` * 3. 一定要 return config 要不请求就不会发送 */ instance.interceptors.request.use(config => { // 1. 获取 Vuex 中的 token const { token } = store.state.user.profile // 2. 给请求头携带token if (token) config.headers.Authorization = `Bearer ${token}` // 一定要return出去 return config }, e => Promise.reject(e)) // token失效跳回到登录页 /** * 响应拦截器 判断token失效 退出到登录页或者重新获取token */ instance.interceptors.response.use(res => res.data, e => { // 判断状态吗是401的时候 if (e?.response?.status === 401) { // 获取到地址栏的路径 encodeURLComponent() 编码 const redirectUrl = encodeURIComponent(router.currentRoute.value.fullPath) // 跳转到登录页 后面拼接的路径是为了登录之后跳转到 之前的页面 router.push('/login?redirectUrl=' + redirectUrl) } return Promise.reject(e) }) const request = (url, method, reData) => { return instance({ url, method, // 对象的key可以写成数组的形式 [] 里面可以写一些简单的表达式 和 函数的调用 [method === 'get' ? 'params' : 'data']: reData }) } export default request
(3) 创建api处理
// 定义首页需要的接口函数
import request from '@/utils/request'
/**
* @description: 获取导航数据
* @param {*}
* @return {*}
*/
export const findHeadCategory = () => {
return request('/home/category/head', 'get')
}
有数据返回 ,我们的aixos封装完成
大于16位的数字 属于大数 ,会导致 JS 无法正确的进行数字的处理和运算,需要经过处理后才能显示正确
> 1323819148127502300 + 1 === 1323819148127502300 + 2
> true
yarn add json-bigint
const instance = axios.create({ baseURL: 'http://pcapi-xiaotuxian-front.itheima.net/', timeout: 5000, // 在这里进行大数处理 transformResponse: [function (data) { // 对内容进行处理 // data:就是本次请求获取的数据 // 在这里可以对它进行进一步的处理 -- JSONbig // 后端返回数据可能不是 JSON 字符串,而JSONbig.parse()只能处理JSON字符串 // 所以,为了保证代码可以正常执行,这里引入try-catch来捕获异常 try { // 尝试着进行大数的处理 return bigInt.parse(data) } catch { // 大数处理失败时的后备方案 return JSON.parse(data) } }] })
记得要转化成字符串
created () {
console.log(this.obj.art_id.toString())
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。