记录项目中一次proxy的使用

6 篇文章 0 订阅
6 篇文章 0 订阅

问题

在我做的AI项目中涉及到很多资源的GPU卡类型,但是后端的接口在卡类型上不统一,有的字段avaliableResource的卡类型字段如下

const avaliableResource = {
	GPUT4: 20,
	GPUV100: 40,
	Vgpu: 100,
}

而另一个接口给的TrainList卡类型用于选择器组件如下

const TrainList = {
	gpuList:[T4, V100]
}

**问题1:**用户选择卡类型后,我们要将对应卡类型的剩余资源展示出来,每次要做一个去掉GPU前缀的处理来映射avaliableResource字段。
**问题2:**用户如果没选卡则卡类型分两种情况1.有卡数的情况,卡类型要设置为vuda 2.如果用户没填卡数也没选卡,则卡类型为空字符串,这两种情况的剩余卡数都要展示avaliableResource.Vgpu的卡数。

解决方案

方案一

写一个getter函数getGpuType,在访问key的时候执行getGpuType(key)。也能解决问题,方案如下

 const getGpuType = (key)=>['VCUDA','','VGPU', 'GPU'].includes(key.toLocaleUpperCase()) ? 'Vgpu' : key

1.但是很多地方都需要调用,如何能无痕不需要调用该函数解决这个问题呢?否则后续别人开发时都要看一下这个函数做了什么。

完美方案

const DEFAULT_GPU_TYPE = ['VCUDA','GPU','VGPU']
const createGpuTypeProxy = target => new Proxy(target, {
	get(target, key, proxyTarget){
		const upKey = key.toLocaleUpperCase()
		// 处理Resource的,也可以直接替换key === 'Resource'
		if(_.isObject(target[key])){
			return createGpuTypeProxy(target[key])
		}
		if(DEFAULT_GPU_TYPE.includes(upKey)){
			return Reflect(target,'Vgpu', proxyTarget)
		}
		if(upKey.startsWith('GPU')){
			return Reflect(target, upKey.replace('GPU',''), proxyTarget)
		}
		return Reflect.get(target, key, proxyTarget)
	}
})
const Parent = ()=>{
	const [avaliableResource, setAvaliableResource] = useState()
	/**
	* 这里省略调用接口设置avaliableResource,avaliableResource结构如下
	* const avaliableResource = {
	*	GPUT4: 20,
	*	GPUV100: 40,
	*	Vgpu: 100,
	*	Resource:{
	*		GPUT4: 40,
	*		VGpu: 30
	*	}
	*  }
	*/
	const avaliableResourceProxy = useMemo(()=> createGpuTypeProxy(avaliableResource) ,[avaliableResource])
	return <>
		<Children avaliableResource={avaliableResourceProxy}/>
	</>
}

然后所有组件即可无感访问avaliableResource上的属性

从引用的描述可以看出,vite proxy代理不生效的问题可能是由于访问方式不正确导致的。在该引用,当使用localhost访问时代理不成功,但使用127.0.0.1访问时代理起作用了。所以,你可以尝试使用正确的访问方式来解决这个问题。 此外,引用提到,在配置完代理后一定要重新执行命令,即重新运行npm run dev命令。如果代理仍未生效,可以检查项目的index.js文件的代理配置是否正确。确保代理配置正确后重新执行命令。 另外,引用的vite.config配置示例也可以作为参考。你可以检查vite.config文件的代理配置是否正确,并确保代理路径、目标地址、跨域设置等都正确设置。 总结而言,vite proxy代理不生效的原因可能是访问方式不正确或代理配置有误。你可以尝试使用正确的访问方式,并检查代理配置是否正确设置。如果问题仍然存在,可以进一步排查其他可能的原因。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [记录一次vite代理不成功的奇葩问题](https://blog.csdn.net/ai520587/article/details/130934082)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Vue使用Proxy代理后仍无法生效的解决](https://download.csdn.net/download/weixin_38526823/14900988)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue3 vite配置跨域以及不生效问题](https://blog.csdn.net/Motion_zq/article/details/128904854)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大鲤余

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

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

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

打赏作者

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

抵扣说明:

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

余额充值