init
This commit is contained in:
		| @@ -1,3 +1,4 @@ | ||||
| import fs from 'node:fs'; | ||||
| import path from 'node:path'; | ||||
| import { checkFileExists, AssistantConfig } from '@/module/assistant/index.ts'; | ||||
| import { chalk } from '@/module/chalk.ts'; | ||||
| @@ -40,5 +41,10 @@ export class AssistantInit extends AssistantConfig { | ||||
|       }); | ||||
|       console.log(chalk.green('助手配置文件创建成功')); | ||||
|     } | ||||
|     const env = this.configPath?.envConfigPath; | ||||
|     if (!checkFileExists(env, true)) { | ||||
|       fs.writeFileSync(env, '# 环境配置文件\n'); | ||||
|       console.log(chalk.green('助手环境配置文件创建成功')); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -43,8 +43,7 @@ export class LocalProxy { | ||||
|     } | ||||
|   } | ||||
|   init() { | ||||
|     const frontAppDir = this.assistantConfig.configPath?.appDir; | ||||
|     console.log('frontAppDir', frontAppDir); | ||||
|     const frontAppDir = this.assistantConfig.configPath?.pageDir; | ||||
|     if (frontAppDir) { | ||||
|       const userList = fs.readdirSync(frontAppDir); | ||||
|       const localProxyProxyList: ProxyType[] = []; | ||||
|   | ||||
| @@ -1,14 +1,14 @@ | ||||
| import { fileProxy, apiProxy, createApiProxy } from '@/module/assistant/index.ts'; | ||||
| import { fileProxy, httpProxy, createApiProxy, wsProxy } from '@/module/assistant/index.ts'; | ||||
| import http from 'http'; | ||||
| import { LocalProxy } from './local-proxy.ts'; | ||||
| import { assistantConfig } from '@/app.ts'; | ||||
| import { assistantConfig, app } from '@/app.ts'; | ||||
| import { log } from '@/module/logger.ts'; | ||||
| const localProxy = new LocalProxy({ | ||||
|   assistantConfig, | ||||
| }); | ||||
| export const proxyRoute = async (req: http.IncomingMessage, res: http.ServerResponse) => { | ||||
|   const _assistantConfig = assistantConfig.getCacheAssistantConfig(); | ||||
|   const appDir = assistantConfig.configPath?.appDir; | ||||
|   const appDir = assistantConfig.configPath?.pageDir; | ||||
|   const url = new URL(req.url, 'http://localhost'); | ||||
|   const pathname = url.pathname; | ||||
|   if (pathname.startsWith('/favicon.ico')) { | ||||
| @@ -17,7 +17,7 @@ export const proxyRoute = async (req: http.IncomingMessage, res: http.ServerResp | ||||
|     return; | ||||
|   } | ||||
|   if (pathname.startsWith('/client')) { | ||||
|     console.log('handle by router'); | ||||
|     console.debug('handle by router'); | ||||
|     return; | ||||
|   } | ||||
|   // client, api, v1, serve 开头的拦截 | ||||
| @@ -25,8 +25,8 @@ export const proxyRoute = async (req: http.IncomingMessage, res: http.ServerResp | ||||
|   const defaultApiProxy = createApiProxy(_assistantConfig?.pageApi || 'https://kevisual.cn'); | ||||
|   const apiBackendProxy = [...apiProxyList, ...defaultApiProxy].find((item) => pathname.startsWith(item.path)); | ||||
|   if (apiBackendProxy) { | ||||
|     console.log('apiBackendProxy', apiBackendProxy, req.url); | ||||
|     return apiProxy(req, res, { | ||||
|     log.debug('apiBackendProxy', { apiBackendProxy, url: req.url }); | ||||
|     return httpProxy(req, res, { | ||||
|       path: apiBackendProxy.path, | ||||
|       target: apiBackendProxy.target, | ||||
|     }); | ||||
| @@ -45,13 +45,19 @@ export const proxyRoute = async (req: http.IncomingMessage, res: http.ServerResp | ||||
|   } | ||||
|   const proxyApiList = _assistantConfig?.proxy || []; | ||||
|   const proxyApi = proxyApiList.find((item) => pathname.startsWith(item.path)); | ||||
|   if (proxyApi) { | ||||
|     log.log('proxyApi', { proxyApi, pathname }); | ||||
|     const { user, key } = proxyApi; | ||||
|   if (proxyApi && proxyApi.type === 'file') { | ||||
|     log.debug('proxyApi', { proxyApi, pathname }); | ||||
|     const _indexPath = proxyApi.indexPath || `${_user}/${_app}/index.html`; | ||||
|     const _rootPath = proxyApi.rootPath; | ||||
|     if (!_rootPath) { | ||||
|       log.error('Not Found rootPath', { proxyApi, pathname }); | ||||
|       return res.end(`Not Found [${proxyApi.path}] rootPath`); | ||||
|     } | ||||
|     return fileProxy(req, res, { | ||||
|       path: proxyApi.path, // 代理路径, 比如/root/center | ||||
|       rootPath: appDir, // 根路径 | ||||
|       indexPath: `${user}/${key}/index.html`, // 首页路径 | ||||
|       rootPath: proxyApi.rootPath, | ||||
|       ...proxyApi, | ||||
|       indexPath: _indexPath, // 首页路径 | ||||
|     }); | ||||
|   } | ||||
|   const localProxyProxyList = localProxy.getLocalProxyList(); | ||||
| @@ -60,26 +66,31 @@ export const proxyRoute = async (req: http.IncomingMessage, res: http.ServerResp | ||||
|     log.log('localProxyProxy', { localProxyProxy, url: req.url }); | ||||
|     return fileProxy(req, res, { | ||||
|       path: localProxyProxy.path, | ||||
|       rootPath: assistantConfig.configPath?.appDir, | ||||
|       rootPath: appDir, | ||||
|       indexPath: localProxyProxy.indexPath, | ||||
|     }); | ||||
|   } | ||||
|   console.log('handle by router 404', req.url); | ||||
|   const creatCenterProxy = createApiProxy(_assistantConfig?.pageApi || 'https://kevisual.cn', ['/root']); | ||||
|   const centerProxy = creatCenterProxy.find((item) => pathname.startsWith(item.path)); | ||||
|   if (centerProxy) { | ||||
|     console.log('centerProxy', centerProxy, req.url); | ||||
|     return apiProxy(req, res, { | ||||
|     return httpProxy(req, res, { | ||||
|       path: centerProxy.path, | ||||
|       target: centerProxy.target, | ||||
|       type: 'static', | ||||
|       type: 'http', | ||||
|     }); | ||||
|   } | ||||
|   log.debug('handle by router 404', req.url); | ||||
|  | ||||
|   res.statusCode = 404; | ||||
|   res.end('Not Found Proxy'); | ||||
|   // console.log('getCacheAssistantConfig().pageApi', getCacheAssistantConfig().pageApi); | ||||
|   // return apiProxy(req, res, { | ||||
|   //   path: url.pathname, | ||||
|   //   target: getCacheAssistantConfig().pageApi, | ||||
|   // }); | ||||
| }; | ||||
|  | ||||
| export const proxyWs = () => { | ||||
|   const apiProxyList = assistantConfig.getCacheAssistantConfig()?.apiProxyList || []; | ||||
|   const proxy = assistantConfig.getCacheAssistantConfig()?.proxy || []; | ||||
|   const proxyApi = [...apiProxyList, ...proxy].filter((item) => item.ws); | ||||
|   log.debug('proxyApi ', proxyApi); | ||||
|   wsProxy(app.server.server, { | ||||
|     apiList: proxyApi, | ||||
|   }); | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user