前端开发之代理模式

介绍 

代理模式是一种结构型设计模式,它通过为一个对象提供一个代理对象来控制对该对象的访问。代理对象可以在访问真实对象之前或之后添加一些额外的操作。

class RealImg {fileName: string;constructor(fileName: string) {this.fileName = fileName;}disPlay() {this.loadFromDist()console.log("disPlay:", this.fileName)}private loadFromDist(){console.log("loading:", this.fileName)}
}class ProxyImg{realImg: RealImgconstructor(fileName: string) {this.realImg = new RealImg(fileName)}display(){this.realImg.disPlay()}
}
const proxyImg = new ProxyImg('xxx.png')
proxyImg.display()
// loading: xxx.png
// disPlay: xxx.png

符合设计原则:

  • 代理和目标分离,解耦
  • 代理可自行扩展
  • 目标也可自行扩展

 场景

(1)DOM事件代理(委托)

事件绑定到父容器上,而非目标节点。适合目标较多或者数量不确定(入无限加载的瀑布流图片列表)

<div id="container"><a href="#">a1</a><a href="#">a2</a><a href="#">a3</a><a href="#">a4</a>
</div>const container = document.getElementById("container");
if (container) {// DOM 事件代理(委托)container.addEventListener("click", (event) => {const target = event.target as Element;if (target.nodeName === "A") {alert(target.innerHTML);}});
}

(2)webpack devServer proxy

正向代理(客户端代理)。开发环境,前端请求服务器 API,代理本地服务器,或者 mock 接口。

编辑vite.config.ts

server: {port: 3000,proxy: {"/api": {target: "http://localhost:8888",/** 是否启用websockets */ws: true,/** 是否允许跨域 */changeOrigin: true}},
}

编辑 index.ts

<script lang="ts" setup>
import { onMounted } from "vue";
import axios from "axios";onMounted(() => {document.getElementById("btn1")?.addEventListener("click", () => {axios.get("/api/getInfo").then((res) => {console.log("res", res);});});
});
</script>
<template><div id="container"><button id="btn1">发送请求</button></div>
</template>

编辑服务 server.js 文件,执行 node server.js

import http from "http";
http.createServer(function (req, res) {if (req.url === "/api/getInfo") {res.end("info");} else {res.end("hello");}}).listen(8888);

启动前端服务后,访问 http://localhost:3000 点击“发送请求”

 (3)Nginx 反向代理(服务端代理)

1. 将上述 vite+typescript 前端项目打包成 dist(vite.config.ts 配置 base: "dist"),放入nginx的 www 目录。

2. 配置nginx

server {listen       8080;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}location /api {proxy_pass http://127.0.0.1:8888;}
}

3. 启动 nginx

> brew services start nginx 
==> Successfully started `nginx` (label: homebrew.mxcl.nginx)

4. 控制台执行 node server.js,启动上述 server.js 文件。

5. 页面访问 http://localhost:8080/dist

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1546742.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ValueError: Out of range float values are not JSON compliant

可能原因一 可能原因二 数据里面有NaN

优化java中 HashMap 的容量](capacity值)

我们很多人都知道&#xff0c;分配比我们所需更多的内存可能会对应用程序的性能产生负面影响。因此&#xff0c;使用带有容量的构造函数创建列表可能会产生很大的不同。 但是&#xff0c;使用Maps时&#xff0c;这个优化步骤可能不是那么简单。在本文中&#xff0c;我们将学习…

Django 基础之启动命令和启动配置修改

Django启动 django启动一般可以通过ide或者命令启动 ide启动&#xff1a; 启动命令&#xff1a; python manage.py runserver该命令后续可以增加参数&#xff0c;如&#xff1a; python manage.py runserver 8081 python manage.py runserver 127.0.0.1:8082 注意&#xff1…

PDF转换器哪个好?这5款PDF工具值得推荐

PDF转换器哪个好&#xff1f;选择一款优质的PDF转换器&#xff0c;能够极大地提升我们的工作效率与灵活性。它不仅能轻松实现PDF文件与Word、Excel、PPT等多种格式间的互转&#xff0c;还支持图片、TXT等多种格式的转换&#xff0c;满足多样化的办公与学习需求。此外&#xff0…

南卡首款耳夹开放式耳机,舒适与音质双双达行业峰值,再次“颠覆”行业!

近日&#xff0c;南卡Ultra夹耳式蓝牙耳机的正式上市&#xff0c;再次在蓝牙耳机圈内掀起波澜。这款耳机以其超舒适的夹耳式设计和卓越音质&#xff0c;为用户带来了全新的音乐体验&#xff0c;有望重新定义夹耳式耳机的市场标准。 南卡品牌背后有着强大的研发实力和丰富的行业…

一文读懂Service以及实践攻略

一文读懂Service以及实践攻略 目录 1 一文读懂 Kubernetes Service 以及实践攻略 1.1 1. 什么是 Service&#xff1f; 1.1.1 为什么需要 Service&#xff1f; 1.2 2. Service 的工作原理 1.2.1 核心概念1.2.2 流量转发过程 1.3 3. Service 的几种类型及应用场景 2 实践&#…

网络与信息安全工程师(工信部教育与考试中心)

在当今数字化时代&#xff0c;大量的敏感信息与业务流程在网络上传输和处理&#xff0c;使得网络与信息安全成为保障企业运营、政务管理以及金融交易等关键领域不可忽视的一环。 因此&#xff0c;对网络安全专家的需求日益增长。 例如&#xff0c;金融机构、大型电信运营商以…

云专线和虚拟专线是什么?两者有什么区别?

云专线和虚拟专线是两种用于企业网络连接的技术方案&#xff0c;它们各自有不同的特点和适用场景。下面将分别介绍这两种技术&#xff0c;并指出它们之间的主要区别。 云专线 云专线是一种物理的或逻辑的专用线路&#xff0c;它直接连接企业的本地数据中心或分支机构与云端服务…

为什么美联储降息和我国刺激措施可能提振铜价

美联储降低利率通常对铜价产生积极影响。这主要是由于利率与美元汇率之间的关系。当美联储降息时&#xff0c;往往会使美元对其他货币贬值。 由于全球市场上的铜价是以美元计价的&#xff0c;美元走弱会使用其他货币购买的金属价格更便宜。这可能刺激来自国际买家的需求&#x…

RTE 大会报名丨AI 时代新基建:云边端架构和 AI Infra ,RTE2024 技术专场第二弹!

所有 AI Infra 都在探寻规格和性能的最佳平衡&#xff0c;如何构建高可用的云边端协同架构&#xff1f; 语音 AI 实现 human-like 的最后一步是什么&#xff1f; AI 视频的爆炸增长&#xff0c;给新一代编解码技术提出了什么新挑战&#xff1f; 当大模型进化到实时多模态&am…

【深度学习】(7)--神经网络之保存最优模型

文章目录 保存最优模型一、两种保存方法1. 保存模型参数2. 保存完整模型 二、迭代模型 总结 保存最优模型 我们在迭代模型训练时&#xff0c;随着次数初始的增多&#xff0c;模型的准确率会逐渐的上升&#xff0c;但是同时也随着迭代次数越来越多&#xff0c;由于模型会开始学…

亲测好用,吐血整理 ChatGPT 3.5/4.0新手使用手册~

都知道ChatGPT很强大&#xff0c;聊聊天、写论文、搞翻译、写代码、写文案、审合同等等&#xff0c;无所不能~ 那么到底怎么使用呢&#xff1f;其实很简单了&#xff0c;国内AI产品发展也很快&#xff0c;很多都很好用了~ 我一直在用&#xff0c;建议收藏下来~ 有最先进、最…

PHP程序如何实现限制一台电脑登录?

PHP程序如何实现限制一台电脑登录&#xff1f; 可以使用以下几种方法&#xff1a; 1. IP地址限制&#xff1a;在PHP中&#xff0c;可以通过获取客户端的IP地址&#xff0c;然后与允许登录的IP地址列表进行比对。如果客户端的IP地址不在列表中&#xff0c;就禁止登录。 “php $…

U盘未格式化之谜:数据丢失与恢复全攻略

U盘未格式化问题描述 在日常的数字生活中&#xff0c;U盘作为便携的数据存储设备&#xff0c;扮演着不可或缺的角色。然而&#xff0c;不少用户都曾遭遇过这样的困境&#xff1a;当尝试访问未进行格式化操作的U盘时&#xff0c;却发现原本存储的文件竟然不翼而飞&#xff0c;U…

【机器学习】音乐生成——AI如何创作个性化音乐与配乐

我的主页&#xff1a;2的n次方_ 音乐是人类文化的重要组成部分&#xff0c;它具有极强的情感表达和艺术价值。近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;AI已经能够自动生成音乐&#xff0c;甚至根据用户需求创作个性化配乐。AI生成音乐的应用场景广泛&…

35岁java转大模型笔记,大模型智能体(LLM Agent)学习笔记

\1. 什么是大模型&#xff1f; 大模型对应的英文是Large Language Model&#xff08;LLM&#xff09;&#xff0c;即大语言模型&#xff0c;简称大模型。技术层面讲&#xff0c;大模型是一种基于深度学习技术的机器学习模型。 为什么叫大模型呢&#xff1f;它是相对于小模型而…

代码随想录算法训练营第十四天|递归 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度

226.翻转二叉树 翻转一棵二叉树。 思路&#xff1a; 在这里需要注意的是&#xff0c;在递归的时候唯独中序遍历是不可用的&#xff0c;这是因为先对左子树进行了反转&#xff0c;又对自身进行了反转&#xff0c;对自身反转后原本的左子树变成了右子树&#xff0c;如果此时又轮…

流媒体服务软件-LiveNVR channeltree 未授权访问

0x01 产品描述&#xff1a; LiveNVR 能够通过简单的网络摄像机通道配置&#xff0c;将传统监控行业里面的高清网络摄像机 IPCamera、NVR 等具有 RTSP/Onvif 协议输出的设备接入到 LiveNVR&#xff0c;LiveNVR 能够将这些设备源的音/视频数据进行采集、转换、输出&#xff0c;进…

MySQL 5.8 Performance Schema 配置详解

MySQL 5.8 Performance Schema 配置详解 MySQL 的 Performance Schema 是一个用于监控和优化数据库性能的子系统&#xff0c;专门用来收集 MySQL 服务器的运行情况和性能指标。它的核心原理是通过“生产者”和“消费者”的概念来采集和存储数据库中的事件信息&#xff0c;帮助…

UNI-SOP应用场景(2)- 业务平台集成

前面介绍了项目前期我们前端可以不需要业务平台参与就可以开始开发&#xff0c;这一章我们介绍新业务平台怎么集成到UNI-SOP云统一认证中心。 新建项目引入uni-client在云认证统一管理端新增业务平台在业务平台项目配置在认证中心创建的平台信息接口开发和权限校验 新建项目 打…