axios的二次封装
Axios其实就是一个用于发送ajax请求的HTTP库,本质上是对AJAX的封装。
1.为什么要二次封装axios
当我们需要发送多个请求时,每次发请求需要携带一些特定的参数,比如要发送token字符串用来验证用户比如说当前页面用户必须登录成功当前用户作为一个合法身份才能去发请求,维护起来会非常的不方便;错误响应的统一处理;
此处,针对vue项目来进行axios的二次封装
开发环境"serve":"vue-cli-service serve"
2.先下载axios包
npm i axios
3.导入包
import axios from 'axios';
4.位置和代码
在项目的src文件中新建一个utils文件专门用来放置二次封装axios的文件
utils文件下建一个request.js文件用来放置 axios二次封装的代码,再建一个api.js用来导入axios实例化对象service,封装请求
request.js文件
import axios from 'axios'
import { Toast } from 'vant'
import $router from '../router'
var service = axios.create({
timeout: 10 * 1000,
baseURL: process.env.VUE_APP_BASE_API,
})
service.interceptors.request.use(
(config) => {
config.headers['Authorization'] = 'Bearer' + ' ' + localStorage.getItem('token');
Toast.loading({ message: 'loading...', duration: 0 })
return config;
},
(error) => {
return Promise.reject(error);
},
)
service.interceptors.response.use(
(res) => {
Toast.clear();
return res;
},
(error) => {
Toast.clear();
if (error.response.status == 401) {
Toast.fail({ message: "身份认证失败,登陆过期,请重新登录!" })
localStorage.removeItem('token');
$router.push('/login');
}
else if (error.response.status == 404) {
Toast.fail({ message: "访问路径有误!" })
}
else if (error.response.status == 500) {
Toast.fail({ message: "服务器内部错误!" })
}
return Promise.reject(error);
},
)
export default service;
api.js文件
import service from "./request";
export function shop_list(params = {}) {
return service.get('/shop/list', { params })
}
export function user_login(params = {}) {
return service.post('/user/login', params)
}
5.相关的配置文件
这三个文件都是和src并列的,前两个需要自己去创建,第三个文件是项目中带的需要去配置
.env.development文件
# 这里用于定义在开发环境下需要使用的环境变量,这些变量默认以 VUE_APP_ 开头
# 定义在这个文件中的环境变量,在生产环境下不起作用
VUE_APP_BASE_API = /api
.env.production文件
# 这里用于定义在生产环境下需要使用的环境变量,这些变量默认以VUE_APP_开头
# 定义在这个文件中的环境变量,在开发环境下不起作用
VUE_APP_BASE_API = http://waimai.yantianfeng.com/
vue.config.js文件中的配置
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
publicPath: './',
devServer: {
proxy: {
'/api': {
target: "http://waimai.yantianfeng.com/",
changeOrigin: true,
pathRewrite: {}
},
}
}
})
|