vue3 vite解决跨域

本文介绍了如何在Vite项目中配置代理以解决跨域问题。通过修改vite.config.js文件,设置server属性,包括代理目标(target)、改变源(changeOrigin)和重写路径(rewrite),以代理/api开头的请求到指定服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用vite创建项目,配置代理跨域,需要在vite.config.js的文件中,去配置。

这是使用vite搭建项目vite.config.js文件初始化的样子

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],//使用vue插件。
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("/src", import.meta.url))
    }
  },//通过@符,来快速找到src文件。不用使用相对路径来找来找去。
})

下面通过server来配置

export default defineConfig({
  plugins: [vue()],//使用vue插件。
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("/src", import.meta.url))
    }
  },//通过@符,来快速找到src文件。不用使用相对路径来找来找去。
  server: {
    port:4000,//设置服务启动端口号,是一个可选项,不要设置为本机的端口号,可能会发生冲突
    open:true,//是否自动打开浏览器,可选项
    cors:true,//允许跨域。
    // 设置代理
    proxy: {
      // 将请求代理到另一个服务器
      '/api': {
        target: 'https://alloyteam-api.onrender.com/',//这是你要跨域请求的地址前缀
        changeOrigin: true,//开启跨域
        rewrite: path => path.replace(/^\/api/, ''),//去除前缀api
      }
    }
  }
})

这是配置跨域代理之后的vite.config.js的文件。然后通过axios去请求数据。

### 多重问题的解决方案 在Vue3Vite项目中处理多个请求的问题主要依赖于配置`vite.config.ts`文件中的代理设置。对于不同API路径下的需求,可以分别定义不同的代理规则。 #### 配置多条代理规则 为了应对来自不同源的服务端口或名,在`server.proxy`下增加相应的映射关系即可满足需求: ```typescript import { defineConfig } from 'vite' export default defineConfig({ server: { port: 88, open: false, cors: true, proxy: { '/api1': { target: 'http://service1.example.com', changeOrigin: true, rewrite: (path) => path.replace(/^\/api1/, '') }, '/api2': { target: 'http://service2.example.com', changeOrigin: true, rewrite: (path) => path.replace(/^\/api2/, '') } } } }) ``` 上述代码展示了如何针对两个不同前缀(`/api1`, `/api2`)的目标服务创建独立的代理路由[^4]。 当应用程序尝试访问带有这些特定前缀之一的资源时,Vite开发服务器将会拦截该请求并将其转发至指定的目标地址,从而绕过了浏览器同源策略带来的限制。 #### 使用Axios简化HTTP调用 除了正确配置Vite外,还可以利用像Axios这样的库来进一步优化HTTP交互逻辑。通过全局注册的方式可以在整个应用范围内轻松发起带有所需基础URL和其他默认选项的网络请求: ```javascript // main.js 或者 setupProxy.js 中 import { createApp } from 'vue' import App from './App.vue' import axios from 'axios' const app = createApp(App) app.config.globalProperties.$axios = axios.create({ baseURL: process.env.NODE_ENV === 'development' ? '/' : '' }) app.mount('#app') ``` 在此基础上,组件内部可以直接使用 `$axios.get('/api1/resource')` 来获取数据而无需关心具体的主机名差异[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值