vue3 vite配置跨域及不生效问题解决
作者:Motion_zq
这篇文章主要介绍了vue3 vite配置跨域以及不生效问题,本文给大家分享完美解决方案,需要的朋友可以参考下
vue3 vite配置跨域以及不生效问题
1. 在vite.config中添加配置
server: { host: "0.0.0.0", cors: true, port: 8991, open: false, //自动打开 proxy: { // 这里的ccc可乱写, 是拼接在url后面的地址 如果接口中没有统一的后缀可自定义 // 如果有统一后缀, 如api, 直接写api即可, 也不用rewrite了 "^/ccc": { target: "http://116.62.200.158", // 真实接口地址, 后端给的基地址 changeOrigin: true, // 允许跨域 rewrite: (path) => path.replace(/^\/ccc/, ""), // 将ccc替换为空 }, }, },
2. 在.env.development中配置开发环境下的基地址(没有该文件夹手动新建)
VITE_BASEURL='/ccc'
3. 配置axios的基地址
const instancs = axios.create({ baseURL: import.meta.env.VITE_BASEURL, });
最后:
我之前是犯过一个错误的, 导致我搞了半天都没搞好... 就是配置完vite.config, 那个/ccc后缀是接口没有的自己加的, 那么就要手动加上去了...
这是我们公司后端的问题, 大部分后端都会有统一的后缀的, 比如api, 但是我这后端没按照这样的规范来, 然后自己也比较菜... 如果这样配置到时候生产就不能这样写了, 目前我这样配置在开发环境下能正常跑。
解决vue3+vite跨域失败问题
vue3+vite用proxy跨域出现的问题
一、改错前的代码
vite.config.js中的代码
import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue()], server: { proxy: { '/api': { target: "http://gmall-h5-api.atguigu.cn", //跨域地址 changeOrigin: true, //支持跨域 rewrite: (path) => path.replace(/^\/api/, '') //重写路径 } } } })
发送请求的文件中的跨域请求代码
import axios from 'axios' axios.get('/api/product/getBaseCategoryList').then((res) => { console.log('success:' + res.data); }).catch((err) => { console.log('failed:' + err.data); });
出现这些错误是因为 rewrite,写这行代码时要看接口有没有带上/api,如果接口本身就有/api则不需要重写路径,将重写路径的这行代码删掉就好了
二、改正后vite.config.js代码
import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue()], server: { proxy: { '/api': { target: "http://gmall-h5-api.atguigu.cn", //跨域地址 changeOrigin: true, //支持跨域 } } } })
之后就跨域正常跨域了
三、如果想要保留rewrite这行代码,就需要添加拦截器,配置baseURL:“/api”
发送请求的文件中的跨域请求代码如下
import axios from 'axios' const requests = axios.create({ baseURL:"/api", timeout:5000 }); //请求拦截器,在发送请求之前,请求拦截器可以检测到,可以在请求发出去之前做一些事情 requests.interceptors.request.use(config=>{ return config; }); //相应拦截器 requests.interceptors.response.use((res)=>{ return res.data; },(error)=>{ alert(error.message); return new Promise(); }) requests.get('/api/product/getBaseCategoryList').then((res) => { console.log('success:' + res.data); }).catch((err) => { console.log('failed:' + err.data); });
这样写也可以跨域成功
到此这篇关于vue3 vite配置跨域以及不生效问题的文章就介绍到这了,更多相关vue3 vite配置跨域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!