mirror of
				https://github.com/whyour/qinglong.git
				synced 2025-11-01 01:16:07 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { Router, Request, Response, NextFunction } from 'express';
 | |
| import { Container } from 'typedi';
 | |
| import { Logger } from 'winston';
 | |
| import * as fs from 'fs';
 | |
| import config from '../config';
 | |
| import { getFileContentByName, readDirs, rmPath } from '../config/util';
 | |
| import { join } from 'path';
 | |
| import { celebrate, Joi } from 'celebrate';
 | |
| const route = Router();
 | |
| const blacklist = ['.tmp'];
 | |
| 
 | |
| export default (app: Router) => {
 | |
|   app.use('/logs', route);
 | |
| 
 | |
|   route.get('/', async (req: Request, res: Response, next: NextFunction) => {
 | |
|     const logger: Logger = Container.get('logger');
 | |
|     try {
 | |
|       const result = await readDirs(config.logPath, config.logPath, blacklist);
 | |
|       res.send({
 | |
|         code: 200,
 | |
|         data: result,
 | |
|       });
 | |
|     } catch (e) {
 | |
|       logger.error('🔥 error: %o', e);
 | |
|       return next(e);
 | |
|     }
 | |
|   });
 | |
| 
 | |
|   route.get(
 | |
|     '/:file',
 | |
|     async (req: Request, res: Response, next: NextFunction) => {
 | |
|       const logger: Logger = Container.get('logger');
 | |
|       try {
 | |
|         if (blacklist.includes(req.path)) {
 | |
|           return res.send({ code: 403, message: '暂无权限' });
 | |
|         }
 | |
|         const filePath = join(
 | |
|           config.logPath,
 | |
|           (req.query.path || '') as string,
 | |
|           req.params.file,
 | |
|         );
 | |
|         const content = await getFileContentByName(filePath);
 | |
|         res.send({ code: 200, data: content });
 | |
|       } catch (e) {
 | |
|         return next(e);
 | |
|       }
 | |
|     },
 | |
|   );
 | |
| 
 | |
|   route.delete(
 | |
|     '/',
 | |
|     celebrate({
 | |
|       body: Joi.object({
 | |
|         filename: Joi.string().required(),
 | |
|         path: Joi.string().allow(''),
 | |
|         type: Joi.string().optional(),
 | |
|       }),
 | |
|     }),
 | |
|     async (req: Request, res: Response, next: NextFunction) => {
 | |
|       try {
 | |
|         let { filename, path, type } = req.body as {
 | |
|           filename: string;
 | |
|           path: string;
 | |
|           type: string;
 | |
|         };
 | |
|         const filePath = join(config.logPath, path, filename);
 | |
|         await rmPath(filePath);
 | |
|         res.send({ code: 200 });
 | |
|       } catch (e) {
 | |
|         return next(e);
 | |
|       }
 | |
|     },
 | |
|   );
 | |
| };
 | 
