From 28b13dd7ac4f000ba65e9fb2b794fa3e91c39e33 Mon Sep 17 00:00:00 2001 From: Aritro37 <85866469+Aritro37@users.noreply.github.com> Date: Mon, 17 Mar 2025 17:04:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E9=80=9A=E8=BF=87.en?= =?UTF-8?q?v=E9=85=8D=E7=BD=AE=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F?= =?UTF-8?q?=EF=BC=8C=E5=90=8E=E7=AB=AF=E6=94=AF=E6=8C=81=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=89=8D=E7=BD=AE=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 3 ++- backend/src/restful/index.js | 29 ++++++++++++++++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/backend/package.json b/backend/package.json index a53b5e9..38e2c6d 100644 --- a/backend/package.json +++ b/backend/package.json @@ -27,6 +27,7 @@ "automerge": "1.0.1-preview.7", "body-parser": "^1.19.0", "buffer": "^6.0.3", + "dotenv": "^16.4.7", "connect-history-api-fallback": "^2.0.0", "cron": "^3.1.6", "dns-packet": "^5.6.1", @@ -70,4 +71,4 @@ "prettier-plugin-sort-imports": "^1.6.1", "tinyify": "^3.0.0" } -} \ No newline at end of file +} diff --git a/backend/src/restful/index.js b/backend/src/restful/index.js index 60f6ec6..385c53d 100644 --- a/backend/src/restful/index.js +++ b/backend/src/restful/index.js @@ -24,11 +24,30 @@ import registerParserRoutes from './parser'; export default function serve() { let port; let host; + let prefix; if ($.env.isNode) { + const dotenv = eval(`require("dotenv")`); + dotenv.config(); port = eval('process.env.SUB_STORE_BACKEND_API_PORT') || 3000; host = eval('process.env.SUB_STORE_BACKEND_API_HOST') || '::'; + prefix = eval('process.env.SUB_STORE_BACKEND_PATH_PREFIX'); + if (prefix && !prefix.startsWith("/")){ + prefix = '/${prefix}' + } } const $app = express({ substore: $, port, host }); + if (prefix && prefix.length >= 2){ + $app.use((req, res, next) => { + if (req.path.startsWith(prefix)) { + const newPath = req.url.replace(prefix, '') || '/'; + req.url = newPath; + next(); + } else { + res.status(403).send(); + } + }); + } + // register routes registerCollectionRoutes($app); registerSubscriptionRoutes($app); @@ -216,7 +235,7 @@ export default function serve() { app.use( be_share_rewrite, createProxyMiddleware({ - target: `http://127.0.0.1:${port}`, + target: `http://127.0.0.1:${port}${prefix}`, changeOrigin: true, pathRewrite: async (path, req) => { if (req.method.toLowerCase() !== 'get') @@ -237,7 +256,7 @@ export default function serve() { app.use( be_api_rewrite, createProxyMiddleware({ - target: `http://127.0.0.1:${port}${be_api}`, + target: `http://127.0.0.1:${port}${prefix}${be_api}`, pathRewrite: async (path) => { return path.includes('?') ? `${path}&share=true` @@ -248,7 +267,7 @@ export default function serve() { app.use( be_download_rewrite, createProxyMiddleware({ - target: `http://127.0.0.1:${port}${be_download}`, + target: `http://127.0.0.1:${port}${prefix}${be_download}`, changeOrigin: true, }), ); @@ -269,10 +288,10 @@ export default function serve() { $.info(`[FRONTEND] ${fe_address}:${fe_port}`); if (fe_be_path) { $.info( - `[FRONTEND -> BACKEND] ${fe_address}:${fe_port}${be_api_rewrite} -> http://127.0.0.1:${port}${be_api}`, + `[FRONTEND -> BACKEND] ${fe_address}:${fe_port}${be_api_rewrite} -> http://127.0.0.1:${port}${prefix}${be_api}`, ); $.info( - `[FRONTEND -> BACKEND] ${fe_address}:${fe_port}${be_download_rewrite} -> http://127.0.0.1:${port}${be_download}`, + `[FRONTEND -> BACKEND] ${fe_address}:${fe_port}${be_download_rewrite} -> http://127.0.0.1:${port}${prefix}${be_download}`, ); $.info( `[SHARE BACKEND] ${fe_address}:${fe_port}${be_share_rewrite}`,