fix: 优化代码

This commit is contained in:
xion 2024-10-11 23:47:34 +08:00
parent f0468539dc
commit c92f817d66
3 changed files with 70 additions and 23 deletions

View File

@ -96,7 +96,16 @@ export class UserApp {
domain, domain,
}, },
}), }),
}).then((res) => res.json()); })
.then((res) => {
return res.json();
})
.catch((err) => {
return {
code: 500,
message: err,
};
});
if (fetchRes?.code !== 200) { if (fetchRes?.code !== 200) {
console.log('fetchRes is error', fetchRes); console.log('fetchRes is error', fetchRes);
return null; return null;
@ -121,6 +130,12 @@ export class UserApp {
status[key] = false; status[key] = false;
} }
} }
async getLoaded() {
const app = this.app;
const user = this.user;
const key = 'user:app:' + app + ':' + user;
return status[key];
}
async setCacheData() { async setCacheData() {
const app = this.app; const app = this.app;
const user = this.user; const user = this.user;
@ -214,6 +229,9 @@ export class UserApp {
// 删除所有文件 // 删除所有文件
deleteUserAppFiles(user, app); deleteUserAppFiles(user, app);
} }
fileCheck(file: string) {
return checkFileExistsSync(file);
}
async close() { async close() {
// 关闭连接 // 关闭连接
await redis.quit(); await redis.quit();
@ -229,6 +247,7 @@ export const downloadUserAppFiles = async (user: string, app: string, data: type
fs.mkdirSync(uploadFiles, { recursive: true }); fs.mkdirSync(uploadFiles, { recursive: true });
} }
const newFiles = []; const newFiles = [];
try {
if (data.type === 'local') { if (data.type === 'local') {
// local copy file // local copy file
for (let i = 0; i < files.length; i++) { 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') { if (data.type === 'oss') {
const serverPath = 'https://' + resources + '/'; const serverPath = 'https://' + resources + '/';
// server download file // server download file
@ -292,8 +320,12 @@ export const deleteUserAppFiles = async (user: string, app: string) => {
try { try {
fs.rmSync(uploadFiles, { recursive: true }); fs.rmSync(uploadFiles, { recursive: true });
} catch (err) { } catch (err) {
if (err.code === 'ENOENT') {
// 文件不存在
} else {
console.error('deleteUserAppFiles', err); console.error('deleteUserAppFiles', err);
} }
}
// console.log('deleteUserAppFiles', res); // console.log('deleteUserAppFiles', res);
}; };
async function downloadFile(fileUrl: string, destFile: string) { async function downloadFile(fileUrl: string, destFile: string) {

View File

@ -17,7 +17,6 @@ const { api, domain, allowedOrigins } = useConfig<{
}>(); }>();
const fileStore = useFileStore('upload'); const fileStore = useFileStore('upload');
console.log('filePath', fileStore);
const noProxyUrl = ['/', '/favicon.ico']; const noProxyUrl = ['/', '/favicon.ico'];
export const handleRequest = async (req: http.IncomingMessage, res: http.ServerResponse) => { export const handleRequest = async (req: http.IncomingMessage, res: http.ServerResponse) => {
const dns = getDNS(req); const dns = getDNS(req);
@ -42,7 +41,6 @@ export const handleRequest = async (req: http.IncomingMessage, res: http.ServerR
// app = 'codeflow'; // app = 'codeflow';
// domainApp = true; // domainApp = true;
} else { } else {
// 生产环境
// 验证域名 // 验证域名
if (dns.hostName !== domain) { if (dns.hostName !== domain) {
// redis获取域名对应的用户和应用 // redis获取域名对应的用户和应用
@ -172,6 +170,14 @@ export const handleRequest = async (req: http.IncomingMessage, res: http.ServerR
const [indexFilePath, etag] = indexFile.split('||'); const [indexFilePath, etag] = indexFile.split('||');
const contentType = getContentType(indexFilePath); const contentType = getContentType(indexFilePath);
const isHTML = contentType.includes('html'); 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' 会下载文件, 添加文件后缀 // 如果 content是 'application/octet-stream' 会下载文件, 添加文件后缀
if (contentType === 'application/octet-stream') { if (contentType === 'application/octet-stream') {
// 提取文件名,只保留文件名而不是整个路径 // 提取文件名,只保留文件名而不是整个路径
@ -181,9 +187,9 @@ export const handleRequest = async (req: http.IncomingMessage, res: http.ServerR
// 不存在的文件,返回indexFile的文件 // 不存在的文件,返回indexFile的文件
res.writeHead(200, { 'Content-Type': contentType, 'Cache-Control': isHTML ? 'no-cache' : 'public, max-age=3600' }); 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); const readStream = fs.createReadStream(filePath);
readStream.pipe(res); readStream.pipe(res);
return; return;
} else { } else {
const [appFilePath, eTag] = appFile.split('||'); 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 小时 'Cache-Control': isHTML ? 'no-cache' : 'public, max-age=3600', // 设置缓存时间为 1 小时
ETag: eTag, 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); const readStream = fs.createReadStream(filePath);
readStream.pipe(res); readStream.pipe(res);
return; return;
} }
}; };

View File

@ -7,5 +7,5 @@ export const getDNS = (req: http.IncomingMessage) => {
}; };
export const isLocalhost = (hostName: string) => { export const isLocalhost = (hostName: string) => {
return hostName.includes('localhost'); return hostName.includes('localhost') || hostName.includes('192.168');
}; };