vue3+vite:本地代理,配置proxy

一、项目:uniapp+vue3+vite+ts

二、配置文件在vite.config.ts

proxy: {
            '/snow': { // 匹配请求路径,localhost:3000/snow
                target: 'https://www.snow.com/', // 代理的目标地址
                changeOrigin: true, // 开发模式,默认的origin是真实的 origin:localhost:3000 代理服务会把origin修改为目标地址
                // secure: true, // 是否https接口
                // ws: true, // 是否代理websockets
                // rewrite target目标地址 + '/abc',如果接口是这样的,那么不用重写
                // rewrite: (path) => path.replace(/^\/snow/, '') // 路径重写,本项目不需要重写
            }
        }

三、配置分析

3.1、请求接口

  1. axios.get("/snow/api1");

  2. axios.post("/snow/api2");

3.2、这里本地请求的是:

http://localhost:8080/snow/api1

http://localhost:8080/snow/api2

3.3、这里是请求不到这个接口的,因为本地没有这个接口,所以需要配置proxy

代理后:

https://www.snow.com/snow/api1

https://www.snow.com/snow/api2

代理后的地址是我们想要真正请求的接口地址了。

3.5、rewrite:

rewrite: (path) => path.replace(/^\/snow/, '')

rewrite之后:

https://www.snow.com/api1

https://www.snow.com/api2

这样丢失了'/snow',所以请求会报错404找不到这个接口。

四、配置env文件

4.1、文件目录

# 请求接口地址
VITE_REQUEST_BASE_URL = '/abcd'
VITE_SERVER_NAME = 'https://www.abcd.com/'
# VITE开头的变量才会被暴露出去

4.2、配置:envDir,配置后可以找到env文件 

 

 envDir: resolve(__dirname, 'env'),

4.3、 拓展环境变量,配置好env相关文件后,在这里拓展后才生效

 4.4、打印env信息

五、根据env文件,配置多环境开发。

loadEnv:可以读取环境变量文件里的内容

vite.config.ts文件获取--mode信息: process.argv.length-1

process.cwd()此方法返回一个字符串,该字符串指定node.js进程的当前工作目录。所以如果环境变量文件在根目录可以使用这个方法。如果和我一样在env目录下,这个方法不可用。这里我使用’./env‘

loadEnv(process.argv[process.argv.length-1], './env').VITE_SERVER_NAME

proxy: {
   '/m-staff-center': {
   target: loadEnv(process.argv[process.argv.length-1], './env').VITE_SERVER_NAME, 
   changeOrigin: true, 
  }
}

经过测试,接口代理成功。 

六、关注我,一起学习。欢迎交流指正,留言必回。

七、参考链接:

Vue配置文件中的proxy配置_Cerys-zhu的博客-CSDN博客_vue配置proxy

在 vite.config 中使用 env 环境变量 - 简书

在 vite.config 中使用 env 环境变量 - 知乎

vue3 + vite + ts_哔哩哔哩_bilibili-讲的很好

Vue3 中,如果你想要通过 Vite 配置文件 `vite.config.ts` 来代理 WebSocket 连接,Vite 提供了一个 `serverMiddleware` 功能,允许你在服务器中间件中设置自定义的请求处理。对于 WebSocket 的代理,你可以创建一个处理 WebSocket 连接的函数,并将其添加到 `viteServer.ws` 数组中。 以下是一个简单的示例,展示如何在 `vite.config.ts` 中配置 WebSocket 代理: ```typescript import { createServer } from 'http' import { createVueApp } from 'vue' import App from './App.vue' const app = createVueApp(App) // 创建 WebSocket 代理函数 async function wsProxy(ws: WebSocket, req: any) { // 如果需要的话,可以在这里对请求做额外的处理 // 比如检查是否已经登录、设置WebSocket路径等 ws.url = '/your-backend-websocket-endpoint'; // 设置代理的目标URL await ws.handshake(req) ws.on('message', async (message) => { // 处理接收到的消息 console.log(`Received message: ${message}`) try { const response = await yourBackendAPI(message); ws.send(response); // 发送回应给客户端 } catch (error) { ws.terminate(); } }); ws.on('close', () => { console.log('WebSocket connection closed') }); } // Vite server 配置 export default defineConfig({ build: {}, server: { middleware: [ { path: /^\/ws/, // 匹配所有以/ws开头的URL handler: createServer((req, res) => { const ws = new WebSocket(req.url.replace(/^ws:/i, 'wss:' if process.env.NODE_ENV === 'production' else 'ws:')); // 使用ws或wss取决于生产环境 wsProxy(ws, req); ws.pipe(res); ws.on('upgrade', (ws) => wsProxy(ws, req)); }), }, ], }, plugins: [], }) ``` 在这个例子中,`wsProxy` 函数会在客户端尝试连接WebSocket时被调用,它会将连接升级并转发到指定的后台WebSocket端点。记得替换 `/your-backend-websocket-endpoint` 为实际的WebSocket服务地址。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值