vue3下的uniapp跨域踩坑

当使用uniapp开发H5并遇到跨域问题时,通常会在manifest的h5配置下设置代理。然而,在vue3中,由于采用了vite,pathRewrite的路径重写功能需要使用函数写法,而JSON不支持函数。为此,需要创建vite.config.js文件来定义代理规则,通过replace方法实现路径重写。配置完成后重启项目,问题即可解决。

uniapp vue3 H5跨域踩坑


开发移动端H5的时候由于后端接口没有做跨域处理,因此需要做下服务器代理,于是百度搜索了uniapph5的跨域配置

manifest下的h5配置proxy,大概是这样:

"h5": {
		"devServer": {
			"https": false,
			"proxy": {
				"/api": {
					"target": "服务器地址",
					"pathRewirte": {
						//路径重写
						"^/api": "/"
					}
				}
			}
		}
	}

但是配置完后,怎么都不生效,一直返回404,开始以为是没重启项目,端口占用等等一系列的问题

逐个排查后发现,配置生效了,服务器的确是代理了,但是pathRewirte的地址重写不会生效

在这里插入图片描述

查看uniapp文档

在这里插入图片描述

pathRewirtewebpack的写法,因此在vue2的项目中不存在这个问题,vue3中使用的vite需要使用函数写法重写路径,但是json不支持写函数,因此无法重写路径。



解决方案

在根路径下新建vite配置文件vite.config.js

import {
	defineConfig
} from "vite"
import uni from "@dcloudio/vite-plugin-uni";
 
export default defineConfig({
	plugins: [
		uni()
	],
	server: {
		proxy: {
			'/api': {
				target: 'http://localhost:3000',
				changeOrigin: true,
				rewrite: path => path.replace(/^\/api/, '')
			},
			
		}
	}
})

重启项目即可使用vite的配置文件进行代理。

### VueUniApp 在 H5 网页中的解决方案 在开发基于 VueUniApp 的 H5 应用时,问题是一个常见的挑战。以下是针对 VueUniApp 的 H5 问题的解决方案。 #### 1. Vue 的 H5 解决方案 Vue 提供了内置的开发服务器配置选项 `devServer.proxy`,可以用来解决开发环境下的问题。通过在项目根目录下创建或修改 `vue.config.js` 文件,添加代理规则即可实现请求。 以下是一个典型的配置示例: ```javascript // vue.config.js module.exports = { devServer: { proxy: { '/api': { // 定义了一个代理规则,匹配所有以 "/api" 开头的请求路径 target: 'https://example.com', // 目标服务器地址 changeOrigin: true, // 修改请求头中的 host 字段为 target 的地址 pathRewrite: { '^/api': '' } // 可选:重写请求路径,去掉 /api 前缀 } } } }; ``` 此配置将所有以 `/api` 开头的请求转发到目标服务器,并且通过设置 `changeOrigin: true` 修改请求头中的 `host` 字段[^3]。 #### 2. UniApp 的 H5 解决方案 UniApp 的 H5 解决方案与 Vue 类似,也可以通过配置 `manifest.json` 文件中的 `h5` 配置项来实现请求代理。以下是一个示例: ```json { "h5": { "devServer": { "proxy": { "/adminapi": { // 定义了一个代理规则,匹配所有以 "/adminapi" 开头的请求路径 "target": "https://www.demo.com", // 目标服务器地址 "changeOrigin": true, // 修改请求头中的 host 字段为 target 的地址 "pathRewrite": { "^/adminapi": "" } // 可选:重写请求路径,去掉 /adminapi 前缀 } } } } } ``` 此配置将所有以 `/adminapi` 开头的请求转发到目标服务器,并且通过设置 `changeOrigin: true` 修改请求头中的 `host` 字段[^1]。 #### 3. 注意事项 - **生产环境**:上述方法仅适用于开发环境下的问题。在生产环境中,通常需要后端配合,通过设置 CORS(资源共享)策略来允许前端访问。 - **CORS 配置**:后端可以通过设置响应头 `Access-Control-Allow-Origin` 来指定允许访问的前端名。例如: ```http Access-Control-Allow-Origin: https://your-domain.com ``` - **路径匹配**:确保代理规则中的路径(如 `/api` 或 `/adminapi`)与实际请求路径一致,否则代理不会生效。 #### 4. 示例代码 以下是一个完整的 VueUniApp 配置示例: ##### Vue 配置 ```javascript // vue.config.js module.exports = { devServer: { proxy: { '/api': { target: 'https://backend.example.com', changeOrigin: true, pathRewrite: { '^/api': '' } } } } }; ``` ##### UniApp 配置 ```json { "h5": { "devServer": { "proxy": { "/api": { "target": "https://backend.example.com", "changeOrigin": true, "pathRewrite": { "^/api": "" } } } } } } ``` ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raccom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值