From 8116c78ddaaf7c8ee89a109cf0651d694d29ede7 Mon Sep 17 00:00:00 2001 From: xream Date: Wed, 12 Mar 2025 15:30:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8D=87=E7=BA=A7=20http-proxy-middlew?= =?UTF-8?q?are?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 2 +- backend/pnpm-lock.yaml | 40 +++++++++++++++--------------------- backend/src/restful/index.js | 31 +++++++++++----------------- 3 files changed, 29 insertions(+), 44 deletions(-) diff --git a/backend/package.json b/backend/package.json index 717ca7d..dc0adde 100644 --- a/backend/package.json +++ b/backend/package.json @@ -26,7 +26,7 @@ "cron": "^3.1.6", "dns-packet": "^5.6.1", "express": "^4.17.1", - "http-proxy-middleware": "^2.0.6", + "http-proxy-middleware": "^3.0.3", "ip-address": "^9.0.5", "js-base64": "^3.7.2", "jsrsasign": "^11.1.0", diff --git a/backend/pnpm-lock.yaml b/backend/pnpm-lock.yaml index 8a82513..80bb321 100644 --- a/backend/pnpm-lock.yaml +++ b/backend/pnpm-lock.yaml @@ -33,8 +33,8 @@ importers: specifier: ^4.17.1 version: 4.21.2 http-proxy-middleware: - specifier: ^2.0.6 - version: 2.0.7 + specifier: ^3.0.3 + version: 3.0.3 ip-address: specifier: ^9.0.5 version: 9.0.5 @@ -2366,14 +2366,9 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - http-proxy-middleware@2.0.7: - resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true + http-proxy-middleware@3.0.3: + resolution: {integrity: sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} http-proxy@1.18.1: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} @@ -2597,10 +2592,6 @@ packages: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} - is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} @@ -5424,7 +5415,7 @@ snapshots: axios@0.21.4: dependencies: - follow-redirects: 1.15.9 + follow-redirects: 1.15.9(debug@4.4.0) transitivePeerDependencies: - debug @@ -6767,7 +6758,9 @@ snapshots: inherits: 2.0.4 readable-stream: 2.3.8 - follow-redirects@1.15.9: {} + follow-redirects@1.15.9(debug@4.4.0): + optionalDependencies: + debug: 4.4.0(supports-color@8.1.1) for-each@0.3.3: dependencies: @@ -7150,20 +7143,21 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-proxy-middleware@2.0.7: + http-proxy-middleware@3.0.3: dependencies: '@types/http-proxy': 1.17.15 - http-proxy: 1.18.1 + debug: 4.4.0(supports-color@8.1.1) + http-proxy: 1.18.1(debug@4.4.0) is-glob: 4.0.3 - is-plain-obj: 3.0.0 + is-plain-object: 5.0.0 micromatch: 4.0.8 transitivePeerDependencies: - - debug + - supports-color - http-proxy@1.18.1: + http-proxy@1.18.1(debug@4.4.0): dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.9 + follow-redirects: 1.15.9(debug@4.4.0) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -7382,8 +7376,6 @@ snapshots: is-plain-obj@2.1.0: {} - is-plain-obj@3.0.0: {} - is-plain-object@2.0.4: dependencies: isobject: 3.0.1 diff --git a/backend/src/restful/index.js b/backend/src/restful/index.js index dbaee19..60f6ec6 100644 --- a/backend/src/restful/index.js +++ b/backend/src/restful/index.js @@ -194,11 +194,12 @@ export default function serve() { const staticFileMiddleware = express_.static(fe_path); - let be_share_rewrite = '/share/:type/:name'; - let be_api_rewrite = ''; - let be_download_rewrite = ''; let be_api = '/api/'; let be_download = '/download/'; + let be_share = '/share/'; + let be_download_rewrite = ''; + let be_api_rewrite = ''; + let be_share_rewrite = `${be_share}:type/:name`; if (fe_be_path) { if (!fe_be_path.startsWith('/')) { throw new Error( @@ -217,7 +218,7 @@ export default function serve() { createProxyMiddleware({ target: `http://127.0.0.1:${port}`, changeOrigin: true, - pathRewrite: (path, req) => { + pathRewrite: async (path, req) => { if (req.method.toLowerCase() !== 'get') throw new Error('Method not allowed'); const tokens = $.read(TOKENS_KEY) || []; @@ -229,34 +230,26 @@ export default function serve() { (t.exp == null || t.exp > Date.now()), ); if (!token) throw new Error('Forbbiden'); - return path; + return req.originalUrl; }, }), ); app.use( be_api_rewrite, createProxyMiddleware({ - target: `http://127.0.0.1:${port}`, - pathRewrite: (path) => { - const newPath = path.startsWith(be_api_rewrite) - ? path.replace(be_api_rewrite, be_api) - : path; - return newPath.includes('?') - ? `${newPath}&share=true` - : `${newPath}?share=true`; + target: `http://127.0.0.1:${port}${be_api}`, + pathRewrite: async (path) => { + return path.includes('?') + ? `${path}&share=true` + : `${path}?share=true`; }, }), ); app.use( be_download_rewrite, createProxyMiddleware({ - target: `http://127.0.0.1:${port}`, + target: `http://127.0.0.1:${port}${be_download}`, changeOrigin: true, - pathRewrite: (path) => { - return path.startsWith(be_download_rewrite) - ? path.replace(be_download_rewrite, be_download) - : path; - }, }), ); }