feat: Node.js 前端代理后端路由 需设置环境变量 注意安全 SUB_STORE_FRONTEND_PATH=/prefix

This commit is contained in:
xream 2023-12-13 02:04:24 +08:00
parent c35e9d37ae
commit e05475aa5e
No known key found for this signature in database
GPG Key ID: 1D2C5225471789F9
2 changed files with 29 additions and 7 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "sub-store", "name": "sub-store",
"version": "2.14.125", "version": "2.14.126",
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.",
"main": "src/main.js", "main": "src/main.js",
"scripts": { "scripts": {

View File

@ -68,23 +68,42 @@ export default function serve() {
const staticFileMiddleware = express_.static(fe_path); const staticFileMiddleware = express_.static(fe_path);
let be_rewrite = ''; let be_api_rewrite = '';
let be_download_rewrite = '';
let be_api = '/api/'; let be_api = '/api/';
let be_download = '/download/';
if (fe_be_path) { if (fe_be_path) {
if (!fe_be_path.startsWith('/')) { if (!fe_be_path.startsWith('/')) {
throw new Error( throw new Error(
'SUB_STORE_FRONTEND_BACKEND_PATH should start with /', 'SUB_STORE_FRONTEND_BACKEND_PATH should start with /',
); );
} }
be_rewrite = `${fe_be_path === '/' ? '' : fe_be_path}${be_api}`; be_api_rewrite = `${
fe_be_path === '/' ? '' : fe_be_path
}${be_api}`;
be_download_rewrite = `${
fe_be_path === '/' ? '' : fe_be_path
}${be_download}`;
app.use( app.use(
be_rewrite, be_api_rewrite,
createProxyMiddleware({ createProxyMiddleware({
target: `http://127.0.0.1:${port}`, target: `http://127.0.0.1:${port}`,
changeOrigin: true, changeOrigin: true,
pathRewrite: (path) => { pathRewrite: (path) => {
return path.startsWith(be_rewrite) return path.startsWith(be_api_rewrite)
? path.replace(be_rewrite, be_api) ? path.replace(be_api_rewrite, be_api)
: path;
},
}),
);
app.use(
be_download_rewrite,
createProxyMiddleware({
target: `http://127.0.0.1:${port}`,
changeOrigin: true,
pathRewrite: (path) => {
return path.startsWith(be_download_rewrite)
? path.replace(be_download_rewrite, be_download)
: path; : path;
}, },
}), }),
@ -106,7 +125,10 @@ export default function serve() {
$.info(`[FRONTEND] ${fe_address}:${fe_port}`); $.info(`[FRONTEND] ${fe_address}:${fe_port}`);
if (fe_be_path) { if (fe_be_path) {
$.info( $.info(
`[FRONTEND -> BACKEND] ${fe_address}:${fe_port}${be_rewrite} -> http://127.0.0.1:${port}${be_api}`, `[FRONTEND -> BACKEND] ${fe_address}:${fe_port}${be_api_rewrite} -> http://127.0.0.1:${port}${be_api}`,
);
$.info(
`[FRONTEND -> BACKEND] ${fe_address}:${fe_port}${be_download_rewrite} -> http://127.0.0.1:${port}${be_download}`,
); );
} }
}); });