| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- // src/utils/request.js
- // 该文件是用来 二次 封装 axios 用的
- import axios from 'axios'
- import router from '@/router/index.js'
- // 开发环境(写代码的阶段) development
- // 生产环境(代码已经写好已经部署到服务器了) production
- // 测试环境(代码已经写好了但是还没有部署) production
- // process.env.NODE_ENV 用来获取我们当前的环境
- const isDev = process.env.NODE_ENV == 'development'
- // 修正赋值逻辑,使用逻辑或运算符
- const BASE_URL = import.meta.env.VITE_BASE_URL || 'http://192.168.110.8:8080/admin-api'
- // 创建一个请求对象
- const request = axios.create({
- // `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
- // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
- // baseURL: isDev ? 'http://121.89.205.189:3000/admin' : 'http://121.89.205.189:3000/admin',
- baseURL: BASE_URL,
- // baseURL: '/api',
- // `timeout` 指定请求超时的毫秒数。
- // 如果请求时间超过 `timeout` 的值,则请求会被中断
- timeout: 60000, // 默认值是 `0` (永不超时)
- })
- // 添加请求拦截器
- request.interceptors.request.use(function (config) {
- // 在发送请求之前做些什么
- // console.log(localStorage.getItem('token'));
- // 1. 先获取 token
- const token = localStorage.getItem('token')
- // 2. 设置 token
- config.headers.token = token
- return config;
- }, function (error) {
- // 对请求错误做些什么
- return Promise.reject(error);
- });
- // 添加响应拦截器
- request.interceptors.response.use(function (response) {
- // 2xx 范围内的状态码都会触发该函数。
- // 对响应数据做点什么
- if (response.data.code == '401') {
- // token 无效,之后我们可以重新登录
- localStorage.clear()
- router.push('/login')
- }
- return response.data;
- }, function (error) {
- // 超出 2xx 范围的状态码都会触发该函数。
- // 对响应错误做点什么
- return Promise.reject(error);
- });
- // ajax 自定义各种数据请求的方法
- export default function ajax (config) {
- // 1. 先获取到请求的一些必要参数
- const { url = '', method = 'GET', data = {}, headers = {} } = config
- // 2. 判断我们请求的类型是 get 还是 post 还是其他
- switch (method.toUpperCase()) {
- case 'GET':
- // get 请求
- if (headers['content-type'] == 'application/x-www-form-url-encoded') {
- // 如果提交的是表单数据我们需要格式化数据
- const obj = new URLSearchParams()
- for (const key in data) {
- obj.append(key, data[key])
- }
- return request.post(url, obj, { headers })
- }
- // get 请求的参数我们需要放在 params 中
- return request.get(url, { params: data })
- case 'POST':
- // post 请求
- // 1. 表单提交数据
- if (headers['content-type'] == 'application/x-www-form-url-encoded') {
- // 如果提交的是表单数据我们需要格式化数据
- const obj = new URLSearchParams()
- for (const key in data) {
- obj.append(key, data[key])
- }
- return request.post(url, obj, { headers })
- }
- // 2. 文件数据
- if (headers['content-type'] == 'multipart/form-data') {
- const obj = new FormData()
- for (const key in data) {
- obj.append(key, data[key])
- }
- return request.post(url, obj, { headers })
- }
- // 3. json 数据
- return request.post(url, data, {headers})
- case 'PUT':
- // 通常用来修改数据用的 --- 数据更新
- return request.put(url, data)
- case 'DELETE':
- // 删除数据
- return request.delete(url, { data })
- case 'PATCH':
- // 更新局部资源
- return request.patch(url, data)
- default:
- // 如果前面全部都不是
- return request.request(config)
- }
- }
|