From d145ddc07e62cf67d795fe6fecdbcb76a8d980b9 Mon Sep 17 00:00:00 2001
From: LCJ-MinYa <1049468118@qq.com>
Date: Thu, 13 Feb 2025 16:04:56 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20vite=20proxy=E4=BB=A3=E7=90=86=E8=BD=AC?=
=?UTF-8?q?=E5=8F=91=E7=9A=84=E4=B8=80=E4=BA=9B=E6=8A=80=E5=B7=A7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
public/{ => md}/summer.md | 0
public/md/vite-proxy.md | 89 +++++++++++++++++++++++++++++++++
src/router/modules/demo.ts | 4 ++
src/style/reset.scss | 5 ++
src/utils/tools.ts | 18 +++++++
src/views/demo/module/index.vue | 9 ++--
src/views/demo/viteProxy.vue | 20 ++++++++
7 files changed, 139 insertions(+), 6 deletions(-)
rename public/{ => md}/summer.md (100%)
create mode 100644 public/md/vite-proxy.md
create mode 100644 src/views/demo/viteProxy.vue
diff --git a/public/summer.md b/public/md/summer.md
similarity index 100%
rename from public/summer.md
rename to public/md/summer.md
diff --git a/public/md/vite-proxy.md b/public/md/vite-proxy.md
new file mode 100644
index 0000000..804feb5
--- /dev/null
+++ b/public/md/vite-proxy.md
@@ -0,0 +1,89 @@
+# vite proxy 多个代理相同逻辑怎么简写
+
+在 Vite 中配置多个代理可以通过简化代码来提高可读性和维护性。以下是如何将多个代理配置相同逻辑的简写方法。
+
+### 1. **基础配置**
+
+假设你有多个代理需要指向相同的目标,可以使用一个函数来生成代理配置。
+
+### 2. **示例代码**
+
+```javascript
+import { defineConfig } from 'vite';
+
+const createProxy = (prefix) => ({
+ target: 'http://example.com',
+ changeOrigin: true,
+ rewrite: (path) => path.replace(new RegExp(`^/${prefix}`), ''),
+});
+
+export default defineConfig({
+ server: {
+ proxy: {
+ '/api1': createProxy('api1'),
+ '/api2': createProxy('api2'),
+ '/api3': createProxy('api3'),
+ },
+ },
+});
+```
+
+### 3. **说明**
+
+- `createProxy` 函数接收一个前缀参数,并返回一个完整的代理配置对象。
+- 在 `server.proxy` 中,你可以调用 `createProxy` 来生成每个代理的配置,从而避免重复代码。
+
+### 4. **扩展**
+
+如果有更多的相似逻辑需求,可以进一步扩展 `createProxy` 函数,增加其他选项,保持代码的灵活性和可读性。
+
+### 总结
+
+通过创建一个可复用的函数来配置代理,可以大大简化 Vite 的代理配置,使代码更清晰可维护。
+
+---
+
+# vite 里面设置代理转发,判断如果请求地址有http://xxxx/api就跳过,如果请求地址为/api就代理怎么实现
+
+在 Vite 中设置代理并根据请求地址进行判断,可以通过自定义代理配置来实现。你可以使用 `configureServer` 钩子来更灵活地控制请求的转发逻辑。
+
+以下是一个示例,展示如何实现这个功能:
+
+### 示例代码
+
+```javascript
+import { defineConfig } from 'vite';
+
+export default defineConfig({
+ server: {
+ proxy: {
+ '/api': {
+ target: 'http://your-target-url.com', // 替换为你的目标地址
+ changeOrigin: true,
+ configure: (proxy) => {
+ proxy.on('proxyReq', (proxyReq, req, res) => {
+ // 判断请求地址
+ if (req.originalUrl.startsWith('http://xxxx/api')) {
+ // 如果是http://xxxx/api,跳过代理
+ proxyReq.abort(); // 终止请求
+ }
+ });
+ },
+ },
+ },
+ },
+});
+```
+
+### 说明
+
+1. **`target`**: 设置为你的目标 API 地址。
+2. **`changeOrigin`**: 将请求头中的 Origin 更改为目标 URL。
+3. **`configure`**: 函数允许你访问代理实例并自定义请求处理。
+4. **`proxy.on('proxyReq', ...)`**: 监听代理请求事件,在此处可以对请求进行判断。
+5. **`req.originalUrl.startsWith('http://xxxx/api')`**: 判断请求的 URL 是否以指定的地址开头。
+6. **`proxyReq.abort()`**: 如果条件匹配,则终止请求,不进行代理。
+
+### 总结
+
+通过上述配置,你可以根据请求的 URL 判断是否进行代理,从而实现特定条件下的请求跳过。根据实际需求调整 URL 和目标地址即可。
\ No newline at end of file
diff --git a/src/router/modules/demo.ts b/src/router/modules/demo.ts
index 96d7d9a..03273c9 100644
--- a/src/router/modules/demo.ts
+++ b/src/router/modules/demo.ts
@@ -60,6 +60,10 @@ const titleArr = [
key: 'module',
title: 'CommonJS AMD CMD ESM总结',
},
+ {
+ key: 'viteProxy',
+ title: 'vite中设置代理转发',
+ },
];
// @/views/demo/**/*.vue
diff --git a/src/style/reset.scss b/src/style/reset.scss
index 9538b2d..20a31d1 100644
--- a/src/style/reset.scss
+++ b/src/style/reset.scss
@@ -269,4 +269,9 @@ div:focus {
padding-left: 40px;
list-style: disc;
}
+ hr {
+ margin: 40px 0;
+ height: 10px;
+ background: #f5f5f5;
+ }
}
diff --git a/src/utils/tools.ts b/src/utils/tools.ts
index 077434a..75829ee 100644
--- a/src/utils/tools.ts
+++ b/src/utils/tools.ts
@@ -82,3 +82,21 @@ export const generateUUID = () => {
return v.toString(16);
});
};
+
+/** 获取远程资源markdown内的内容 */
+export const getMarkdownContent = (filePath) => {
+ return new Promise((resolve, reject) => {
+ fetch(filePath, {
+ method: 'GET',
+ })
+ .then((result) => {
+ result
+ .text()
+ .then((res) => {
+ resolve(res);
+ })
+ .catch((err) => reject(err));
+ })
+ .catch((err) => reject(err));
+ });
+};
diff --git a/src/views/demo/module/index.vue b/src/views/demo/module/index.vue
index 0b8b7ac..5a88b81 100644
--- a/src/views/demo/module/index.vue
+++ b/src/views/demo/module/index.vue
@@ -11,14 +11,11 @@
diff --git a/src/views/demo/viteProxy.vue b/src/views/demo/viteProxy.vue
new file mode 100644
index 0000000..b90d187
--- /dev/null
+++ b/src/views/demo/viteProxy.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+