feat: 升级 http-proxy-middleware

This commit is contained in:
xream 2025-03-12 15:30:14 +08:00
parent 6a026a3d07
commit 8116c78dda
No known key found for this signature in database
GPG Key ID: 1D2C5225471789F9
3 changed files with 29 additions and 44 deletions

View File

@ -26,7 +26,7 @@
"cron": "^3.1.6", "cron": "^3.1.6",
"dns-packet": "^5.6.1", "dns-packet": "^5.6.1",
"express": "^4.17.1", "express": "^4.17.1",
"http-proxy-middleware": "^2.0.6", "http-proxy-middleware": "^3.0.3",
"ip-address": "^9.0.5", "ip-address": "^9.0.5",
"js-base64": "^3.7.2", "js-base64": "^3.7.2",
"jsrsasign": "^11.1.0", "jsrsasign": "^11.1.0",

40
backend/pnpm-lock.yaml generated
View File

@ -33,8 +33,8 @@ importers:
specifier: ^4.17.1 specifier: ^4.17.1
version: 4.21.2 version: 4.21.2
http-proxy-middleware: http-proxy-middleware:
specifier: ^2.0.6 specifier: ^3.0.3
version: 2.0.7 version: 3.0.3
ip-address: ip-address:
specifier: ^9.0.5 specifier: ^9.0.5
version: 9.0.5 version: 9.0.5
@ -2366,14 +2366,9 @@ packages:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
http-proxy-middleware@2.0.7: http-proxy-middleware@3.0.3:
resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==} resolution: {integrity: sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==}
engines: {node: '>=12.0.0'} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
'@types/express': ^4.17.13
peerDependenciesMeta:
'@types/express':
optional: true
http-proxy@1.18.1: http-proxy@1.18.1:
resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
@ -2597,10 +2592,6 @@ packages:
resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
engines: {node: '>=8'} engines: {node: '>=8'}
is-plain-obj@3.0.0:
resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==}
engines: {node: '>=10'}
is-plain-object@2.0.4: is-plain-object@2.0.4:
resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -5424,7 +5415,7 @@ snapshots:
axios@0.21.4: axios@0.21.4:
dependencies: dependencies:
follow-redirects: 1.15.9 follow-redirects: 1.15.9(debug@4.4.0)
transitivePeerDependencies: transitivePeerDependencies:
- debug - debug
@ -6767,7 +6758,9 @@ snapshots:
inherits: 2.0.4 inherits: 2.0.4
readable-stream: 2.3.8 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: for-each@0.3.3:
dependencies: dependencies:
@ -7150,20 +7143,21 @@ snapshots:
statuses: 2.0.1 statuses: 2.0.1
toidentifier: 1.0.1 toidentifier: 1.0.1
http-proxy-middleware@2.0.7: http-proxy-middleware@3.0.3:
dependencies: dependencies:
'@types/http-proxy': 1.17.15 '@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-glob: 4.0.3
is-plain-obj: 3.0.0 is-plain-object: 5.0.0
micromatch: 4.0.8 micromatch: 4.0.8
transitivePeerDependencies: transitivePeerDependencies:
- debug - supports-color
http-proxy@1.18.1: http-proxy@1.18.1(debug@4.4.0):
dependencies: dependencies:
eventemitter3: 4.0.7 eventemitter3: 4.0.7
follow-redirects: 1.15.9 follow-redirects: 1.15.9(debug@4.4.0)
requires-port: 1.0.0 requires-port: 1.0.0
transitivePeerDependencies: transitivePeerDependencies:
- debug - debug
@ -7382,8 +7376,6 @@ snapshots:
is-plain-obj@2.1.0: {} is-plain-obj@2.1.0: {}
is-plain-obj@3.0.0: {}
is-plain-object@2.0.4: is-plain-object@2.0.4:
dependencies: dependencies:
isobject: 3.0.1 isobject: 3.0.1

View File

@ -194,11 +194,12 @@ export default function serve() {
const staticFileMiddleware = express_.static(fe_path); 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_api = '/api/';
let be_download = '/download/'; 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) {
if (!fe_be_path.startsWith('/')) { if (!fe_be_path.startsWith('/')) {
throw new Error( throw new Error(
@ -217,7 +218,7 @@ export default function serve() {
createProxyMiddleware({ createProxyMiddleware({
target: `http://127.0.0.1:${port}`, target: `http://127.0.0.1:${port}`,
changeOrigin: true, changeOrigin: true,
pathRewrite: (path, req) => { pathRewrite: async (path, req) => {
if (req.method.toLowerCase() !== 'get') if (req.method.toLowerCase() !== 'get')
throw new Error('Method not allowed'); throw new Error('Method not allowed');
const tokens = $.read(TOKENS_KEY) || []; const tokens = $.read(TOKENS_KEY) || [];
@ -229,34 +230,26 @@ export default function serve() {
(t.exp == null || t.exp > Date.now()), (t.exp == null || t.exp > Date.now()),
); );
if (!token) throw new Error('Forbbiden'); if (!token) throw new Error('Forbbiden');
return path; return req.originalUrl;
}, },
}), }),
); );
app.use( app.use(
be_api_rewrite, be_api_rewrite,
createProxyMiddleware({ createProxyMiddleware({
target: `http://127.0.0.1:${port}`, target: `http://127.0.0.1:${port}${be_api}`,
pathRewrite: (path) => { pathRewrite: async (path) => {
const newPath = path.startsWith(be_api_rewrite) return path.includes('?')
? path.replace(be_api_rewrite, be_api) ? `${path}&share=true`
: path; : `${path}?share=true`;
return newPath.includes('?')
? `${newPath}&share=true`
: `${newPath}?share=true`;
}, },
}), }),
); );
app.use( app.use(
be_download_rewrite, be_download_rewrite,
createProxyMiddleware({ createProxyMiddleware({
target: `http://127.0.0.1:${port}`, target: `http://127.0.0.1:${port}${be_download}`,
changeOrigin: true, changeOrigin: true,
pathRewrite: (path) => {
return path.startsWith(be_download_rewrite)
? path.replace(be_download_rewrite, be_download)
: path;
},
}), }),
); );
} }