fix: 优化代码
This commit is contained in:
		| @@ -96,7 +96,16 @@ export class UserApp { | ||||
|           domain, | ||||
|         }, | ||||
|       }), | ||||
|     }).then((res) => res.json()); | ||||
|     }) | ||||
|       .then((res) => { | ||||
|         return res.json(); | ||||
|       }) | ||||
|       .catch((err) => { | ||||
|         return { | ||||
|           code: 500, | ||||
|           message: err, | ||||
|         }; | ||||
|       }); | ||||
|     if (fetchRes?.code !== 200) { | ||||
|       console.log('fetchRes is error', fetchRes); | ||||
|       return null; | ||||
| @@ -121,6 +130,12 @@ export class UserApp { | ||||
|       status[key] = false; | ||||
|     } | ||||
|   } | ||||
|   async getLoaded() { | ||||
|     const app = this.app; | ||||
|     const user = this.user; | ||||
|     const key = 'user:app:' + app + ':' + user; | ||||
|     return status[key]; | ||||
|   } | ||||
|   async setCacheData() { | ||||
|     const app = this.app; | ||||
|     const user = this.user; | ||||
| @@ -214,6 +229,9 @@ export class UserApp { | ||||
|     // 删除所有文件 | ||||
|     deleteUserAppFiles(user, app); | ||||
|   } | ||||
|   fileCheck(file: string) { | ||||
|     return checkFileExistsSync(file); | ||||
|   } | ||||
|   async close() { | ||||
|     // 关闭连接 | ||||
|     await redis.quit(); | ||||
| @@ -229,6 +247,7 @@ export const downloadUserAppFiles = async (user: string, app: string, data: type | ||||
|     fs.mkdirSync(uploadFiles, { recursive: true }); | ||||
|   } | ||||
|   const newFiles = []; | ||||
|   try { | ||||
|     if (data.type === 'local') { | ||||
|       // local copy file | ||||
|       for (let i = 0; i < files.length; i++) { | ||||
| @@ -249,6 +268,15 @@ export const downloadUserAppFiles = async (user: string, app: string, data: type | ||||
|         }); | ||||
|       } | ||||
|     } | ||||
|   } catch (err) { | ||||
|     const userApp = new UserApp({ user, app }); | ||||
|     userApp.clearCacheData(); | ||||
|     return { | ||||
|       data: { | ||||
|         files: [], | ||||
|       }, | ||||
|     }; | ||||
|   } | ||||
|   if (data.type === 'oss') { | ||||
|     const serverPath = 'https://' + resources + '/'; | ||||
|     // server download file | ||||
| @@ -292,8 +320,12 @@ export const deleteUserAppFiles = async (user: string, app: string) => { | ||||
|   try { | ||||
|     fs.rmSync(uploadFiles, { recursive: true }); | ||||
|   } catch (err) { | ||||
|     if (err.code === 'ENOENT') { | ||||
|       // 文件不存在 | ||||
|     } else { | ||||
|       console.error('deleteUserAppFiles', err); | ||||
|     } | ||||
|   } | ||||
|   // console.log('deleteUserAppFiles', res); | ||||
| }; | ||||
| async function downloadFile(fileUrl: string, destFile: string) { | ||||
|   | ||||
| @@ -17,7 +17,6 @@ const { api, domain, allowedOrigins } = useConfig<{ | ||||
| }>(); | ||||
|  | ||||
| const fileStore = useFileStore('upload'); | ||||
| console.log('filePath', fileStore); | ||||
| const noProxyUrl = ['/', '/favicon.ico']; | ||||
| export const handleRequest = async (req: http.IncomingMessage, res: http.ServerResponse) => { | ||||
|   const dns = getDNS(req); | ||||
| @@ -42,7 +41,6 @@ export const handleRequest = async (req: http.IncomingMessage, res: http.ServerR | ||||
|     // app = 'codeflow'; | ||||
|     // domainApp = true; | ||||
|   } else { | ||||
|     // 生产环境 | ||||
|     // 验证域名 | ||||
|     if (dns.hostName !== domain) { | ||||
|       // redis获取域名对应的用户和应用 | ||||
| @@ -172,6 +170,14 @@ export const handleRequest = async (req: http.IncomingMessage, res: http.ServerR | ||||
|     const [indexFilePath, etag] = indexFile.split('||'); | ||||
|     const contentType = getContentType(indexFilePath); | ||||
|     const isHTML = contentType.includes('html'); | ||||
|     const filePath = path.join(fileStore, indexFilePath); | ||||
|     if (!userApp.fileCheck(filePath)) { | ||||
|       res.writeHead(500, { 'Content-Type': 'text/html' }); | ||||
|       res.write('File expired, Not Found\n'); | ||||
|       res.end(); | ||||
|       await userApp.clearCacheData(); | ||||
|       return; | ||||
|     } | ||||
|     // 如果 content是 'application/octet-stream' 会下载文件, 添加文件后缀 | ||||
|     if (contentType === 'application/octet-stream') { | ||||
|       // 提取文件名,只保留文件名而不是整个路径 | ||||
| @@ -181,9 +187,9 @@ export const handleRequest = async (req: http.IncomingMessage, res: http.ServerR | ||||
|     // 不存在的文件,返回indexFile的文件 | ||||
|     res.writeHead(200, { 'Content-Type': contentType, 'Cache-Control': isHTML ? 'no-cache' : 'public, max-age=3600' }); | ||||
|  | ||||
|     const filePath = path.join(fileStore, indexFilePath); | ||||
|     const readStream = fs.createReadStream(filePath); | ||||
|     readStream.pipe(res); | ||||
|  | ||||
|     return; | ||||
|   } else { | ||||
|     const [appFilePath, eTag] = appFile.split('||'); | ||||
| @@ -207,8 +213,17 @@ export const handleRequest = async (req: http.IncomingMessage, res: http.ServerR | ||||
|       'Cache-Control': isHTML ? 'no-cache' : 'public, max-age=3600', // 设置缓存时间为 1 小时 | ||||
|       ETag: eTag, | ||||
|     }); | ||||
|     if (!userApp.fileCheck(filePath)) { | ||||
|       console.error('File expired', filePath); | ||||
|       res.writeHead(500, { 'Content-Type': 'text/html' }); | ||||
|       res.write('File expired\n'); | ||||
|       res.end(); | ||||
|       await userApp.clearCacheData(); | ||||
|       return; | ||||
|     } | ||||
|     const readStream = fs.createReadStream(filePath); | ||||
|     readStream.pipe(res); | ||||
|  | ||||
|     return; | ||||
|   } | ||||
| }; | ||||
|   | ||||
| @@ -7,5 +7,5 @@ export const getDNS = (req: http.IncomingMessage) => { | ||||
| }; | ||||
|  | ||||
| export const isLocalhost = (hostName: string) => { | ||||
|   return hostName.includes('localhost'); | ||||
|   return hostName.includes('localhost') || hostName.includes('192.168'); | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user