vue3中的axios进行封装代理的使用(webpack)
1.安装axios
npm install axios
2.在util文件夹下新建axios.js文件,用来处理axios拦截器
axios.js内容:(注意:其中router需要写成这种形式,不然会报 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'push') 错误)
/*** 文件主要用来创建 axios 实例,然后添加请求拦截器和响应拦截器*/import axios from 'axios'import { showToast } from 'vant'import { getToken } from '../util/auth' //这是cookies用来处理token的文件import { router } from '../router'// 1.定义存放后端请求的服务地址的常量。const basePath = ''; // http://localhost:8085// 2.创建 axios 实例const axiosInstance = axios.create({baseURL: basePath,withCredentials: true, //是否允许跨域timeout: 8000})// 3.添加axios实例的请求拦截器axiosInstance.interceptors.request.use(config => {// 发送请求之前(可以在这里给头部添加token)if (getToken()) {config.headers['Authorization'] = 'Bearer ' + getToken()}return config;},error => {// 请求错误console.log(error)return error;})// 4.添加axios实例的响应拦截器。axiosInstance.interceptors.response.use(response => {//console.log("axios响应拦截器的数据:",response);/*** 对响应数据判断:* 如果成功返回数据,就通过return把数据返出去* 如果请求不成功,就在拦截器这里统一处理(组件的代码就不用关注错误的情况了)*/if(response.status==200){// 请求成功,根据实际的后端返回值进行返回,此项目的后端返回值放在对象的data中,因此是response.datareturn response.data;}else{// 请求失败,通过函数 handleErrorData 对错误消息统一处理。//handleErrorData(response.data);}return response;},error => {// 响应错误-axios响应拦截器的错误数据// 响应错误的拦截 通过函数 handleErrorData 对错误消息统一处理。handleErrorData(error.response);return error;})// 对错误信息的处理函数function handleErrorData(errMes){if(errMes.data){showToast(errMes.message);}else{switch(errMes.status){case 401 :showToast("未授权,请重新登录!")router.push('/login')break;case 403 :showToast("拒绝访问");break;case 404 :showToast("很抱歉,资源未找到!");break;case 500 :showToast("服务器错误!");break;case 504 :showToast("网络超时!");break;default :showToast("服务正在联调中,请稍后!");break;}}}export {axiosInstance}
request.js文件中写入
/*** 文件主要封装 axios 的get、post等方法*/import { axiosInstance as axios } from "./axios.js"// 以get方式进行请求export function axiosGet(url,parameter={}) {//debuggerreturn axios({url: url,method: 'get',params: parameter})}// 以post方式进行请求export function axiosPost(url,parameter={}) {return axios({url: url,method:'post' ,data: parameter})}
api.js文件中写入(该文件用来处理接口信息)
import { axiosGet, axiosPost } from './request'export const login = (data) => {//登录return axiosPost('/api/login', data)}
组件中使用方法
<script setup>import { ref } from 'vue';const loginInfo = ref({username:'',password:''})
const onSubmit = async () => {//登录await login(loginInfo.value).then(res=>{console.log(res)//成功}).catch(error=>{console.log(error)//失败})};</script>
在vue.config.js中使用
module.exports = {// 关闭语法检查lintOnSave: false,devServer: {// https: false,//open: true, // 是否自动弹出浏览器页面port: 8095,proxy: {// /api 表示拦截以/api开头的请求路径'/api': {target: "xxx", // 跨域的域名(不需要重写路径)ws: true, // 是否开启websockedechangeOrigin: true, // 是否开启跨域// pathRewrite: { //这里不要重写路径,不然会代理失败(这是我遇到的问题)// '^/api': '',// },},},},}
参考
https://www.cnblogs.com/littleDinosaurs/p/17419899.html
https://blog.csdn.net/qq_34297287/article/details/124890420
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律