From a1f888af59c29f90fb3d2117342bfe8737b9a36f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=9B=E4=B9=8B=E9=9B=A8?= <49258735+taozhiyu@users.noreply.github.com> Date: Sat, 11 Oct 2025 23:23:13 +0800 Subject: [PATCH] Add validation to dependencies GET endpoint and update service logic (#2778) * Add validation to dependencies GET endpoint and update service logic * fix https://github.com/whyour/qinglong/pull/2778/files/6063bc3a67fb329de9b90f7c93524b862bd9eb93#r2266494581 * remove default condition type * fix query mistakes --- back/api/dependence.ts | 33 ++++++++++++++++++++++----------- back/app.ts | 10 ++++++++-- back/services/dependence.ts | 26 ++++++++++++-------------- 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/back/api/dependence.ts b/back/api/dependence.ts index 26c4d15c..2d9dc465 100644 --- a/back/api/dependence.ts +++ b/back/api/dependence.ts @@ -8,17 +8,28 @@ const route = Router(); export default (app: Router) => { app.use('/dependencies', route); - route.get('/', async (req: Request, res: Response, next: NextFunction) => { - const logger: Logger = Container.get('logger'); - try { - const dependenceService = Container.get(DependenceService); - const data = await dependenceService.dependencies(req.query as any); - return res.send({ code: 200, data }); - } catch (e) { - logger.error('🔥 error: %o', e); - return next(e); - } - }); + route.get( + '/', + celebrate({ + query: + Joi.object({ + searchValue: Joi.string().optional().allow(''), + type: Joi.string().optional().allow(''), + status: Joi.string().optional().allow(''), + }), + }), + async (req: Request, res: Response, next: NextFunction) => { + const logger: Logger = Container.get('logger'); + try { + const dependenceService = Container.get(DependenceService); + const data = await dependenceService.dependencies(req.query as any); + return res.send({ code: 200, data }); + } catch (e) { + logger.error('🔥 error: %o', e); + return next(e); + } + }, + ); route.post( '/', diff --git a/back/app.ts b/back/app.ts index 8c76ffd1..2b01de26 100644 --- a/back/app.ts +++ b/back/app.ts @@ -27,6 +27,13 @@ class Application { constructor() { this.app = express(); + // 创建一个全局中间件,删除查询参数中的t + this.app.use((req: express.Request, res: express.Response, next: express.NextFunction) => { + if (req.query.t) { + delete req.query.t; + } + next(); + }); } async start() { @@ -54,8 +61,7 @@ class Application { if (metadata) { if (!this.isShuttingDown) { Logger.error( - `${metadata.serviceType} worker ${worker.process.pid} died (${ - signal || code + `${metadata.serviceType} worker ${worker.process.pid} died (${signal || code }). Restarting...`, ); const newWorker = this.forkWorker(metadata.serviceType); diff --git a/back/services/dependence.ts b/back/services/dependence.ts index 178529b6..1cb7e559 100644 --- a/back/services/dependence.ts +++ b/back/services/dependence.ts @@ -28,7 +28,7 @@ export default class DependenceService { constructor( @Inject('logger') private logger: winston.Logger, private sockService: SockService, - ) {} + ) { } public async create(payloads: Dependence[]): Promise { const tabs = payloads.map((x) => { @@ -98,34 +98,32 @@ export default class DependenceService { searchValue, type, status, - }: { searchValue: string; type: string; status: string }, + }: { + searchValue: string; + type: keyof typeof DependenceTypes; + status: string; + }, sort: any = [], query: any = {}, ): Promise { - let condition = { - ...query, - type: DependenceTypes[type as any], - }; + let condition = query; + if (DependenceTypes[type]) { + condition.type = DependenceTypes[type]; + } if (status) { condition.status = status.split(',').map(Number); } if (searchValue) { const encodeText = encodeURI(searchValue); - const reg = { + condition.name = { [Op.or]: [ { [Op.like]: `%${searchValue}%` }, { [Op.like]: `%${encodeText}%` }, ], }; - - condition = { - ...condition, - name: reg, - }; } try { - const result = await this.find(condition, sort); - return result as any; + return await this.find(condition, sort); } catch (error) { throw error; }