proxy

本文详细解析了Vue4.0中proxytable的正确配置方法,对比了三种不同的代理设置,强调了正确的代理目标和路径重写规则对于跨域请求的重要性。

1、别名:vue4.0 的 @ 别名已经配置好了,代表的是 src 文件夹,可直接使用。

2、怎么配置 proxytable 代理?


// 正确
proxy: {
  '/app': {
    target: 'http://122.152.200.208:9010',
    changeOrigin: true,
    pathRewrite: { '^/': '/' },
  },
},
// 错误
proxy: {
  '/app': {
    target: 'http://122.152.200.208:9010/app',
    changeOrigin: true,
    pathRewrite: { '^/': '/' },
  },
},
// 错误
proxy: {
  '/app': {
    target: 'http://122.152.200.208:9010',
    changeOrigin: true,
    pathRewrite: { '^/app': '/' },
  },
},
以上三种方式代理的结果在network中查看都是这个结果:
http://localhost:8000/app/rest/user/userList,但只有第一个能获取到数据

 

 

### 相关介绍 在编程领域,Proxy 是一个强大的工具,用于实现复杂的对象行为控制。在 JavaScript 中,Proxy 随着 ES6 的引入成为了更强大且灵活的选择,并被 Vue 3 采纳作为其响应式系统的基础。它允许拦截并自定义目标对象的基本操作,支持更多的拦截类型,提供更加直观的 API 设计,从而简化了处理复杂逻辑的过程。而在 Java 中,`java.lang.reflect.Proxy` 也有其重要作用,可用于创建代理对象 [^4][^2]。 ### 原理 在 JavaScript 里,Proxy 本质上是异质对象,部署了必要的内部方法。实例代理对象时指定的处理程序对象,用于自定义代理对象本身的内部方法和行为逻辑,这相当于在引擎内部添加了自己的逻辑 [^1]。 ### 使用方法 #### JavaScript 中使用 以下是一个简单示例: ```javascript let obj = {name:'孤城浪人'}; let proxy = new Proxy(obj,{ get(target,property){ console.log('触发拦截'); return target[property]; } }); console.log(proxy.name); proxy.name = '孤城浪人wpf'; console.log(obj.name); ``` 上述代码创建了一个代理对象 `proxy`,当访问 `proxy` 的属性时,`get` 函数会被触发,并打印相应的日志信息 [^1][^3]。 还可以使用更多拦截器,示例如下: ```javascript let target = { a: 1 }; let handler = { // 拦截对目标对象属性的读取操作 get(target, prop, receiver) { return Reflect.get(target, prop, receiver); }, // 拦截对目标对象属性的赋值操作 set(target, prop, value, receiver) { return Reflect.set(target, prop, value, receiver); }, // 拦截 in 操作符,用于检查目标对象是否包含某个属性 has(target, prop) { return Reflect.has(target, prop); }, // 拦截 delete 操作符,用于删除目标对象的属性 deleteProperty(target, prop) { return Reflect.deleteProperty(target, prop); }, // 拦截 Object.getOwnPropertyNames 和 Object.keys 等方法,用于获取目标对象的自身属性 ownKeys(target) { return Reflect.ownKeys(target); } }; let proxy = new Proxy(target, handler); ``` 这里定义了多种拦截器,分别对目标对象的不同操作进行拦截 [^5]。 #### Java 中使用 `java.lang.reflect.Proxy` 的关键方法是 `newProxyInstance` 方法,用于创建代理对象,示例代码如下: ```java import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; interface MyInterface { void doSomething(); } class MyInvocationHandler implements InvocationHandler { private Object target; public MyInvocationHandler(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("Before method call"); Object result = method.invoke(target, args); System.out.println("After method call"); return result; } } public class ProxyExample { public static void main(String[] args) { MyInterface target = new MyInterface() { @Override public void doSomething() { System.out.println("Doing something"); } }; MyInvocationHandler handler = new MyInvocationHandler(target); MyInterface proxy = (MyInterface) Proxy.newProxyInstance( MyInterface.class.getClassLoader(), new Class<?>[]{MyInterface.class}, handler ); proxy.doSomething(); } } ``` `newProxyInstance` 方法接收类加载器、接口数组和 `InvocationHandler` 实例作为参数 [^2]。 ### 类型 在 JavaScript 中,Proxy 是一种元编程工具,可用于对对象进行代理操作。在 Java 中,`java.lang.reflect.Proxy` 是基于反射机制的动态代理,可在运行时创建代理对象。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值