From 685aced4e4bf3dee796d51d063e770531cbb972b Mon Sep 17 00:00:00 2001 From: hailin Date: Mon, 23 Feb 2026 23:10:08 -0800 Subject: [PATCH] =?UTF-8?q?fix(snapshot):=20=E4=BF=AE=E5=A4=8D=206=20?= =?UTF-8?q?=E4=B8=AA=20TypeScript=20=E4=B8=A5=E6=A0=BC=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - infrastructure.module: handler union type 修正 - minio-storage.adapter: obj.name 可选属性安全检查 - minio-backup.handler: listAllObjects 返回 string[] 避免 BucketItem.name 可选问题 Co-Authored-By: Claude Opus 4.6 --- .../backup/minio-backup.handler.ts | 23 ++++++++++--------- .../infrastructure/infrastructure.module.ts | 4 ++-- .../storage/minio-storage.adapter.ts | 2 +- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/backend/services/snapshot-service/src/infrastructure/backup/minio-backup.handler.ts b/backend/services/snapshot-service/src/infrastructure/backup/minio-backup.handler.ts index 23873dcd..7618d21e 100644 --- a/backend/services/snapshot-service/src/infrastructure/backup/minio-backup.handler.ts +++ b/backend/services/snapshot-service/src/infrastructure/backup/minio-backup.handler.ts @@ -70,17 +70,18 @@ export class MinioBackupHandler implements BackupHandler { onProgress(5, `共 ${totalObjects} 个对象待下载...`); for (const bucket of bucketsToBackup) { - const bucketDir = path.join(tempDownloadDir, bucket.name); + const bucketName = bucket.name; + const bucketDir = path.join(tempDownloadDir, bucketName); fs.mkdirSync(bucketDir, { recursive: true }); - const objects = await this.listAllObjects(bucket.name); + const objects = await this.listAllObjects(bucketName); - for (const obj of objects) { - const objectDir = path.join(bucketDir, path.dirname(obj.name)); + for (const objName of objects) { + const objectDir = path.join(bucketDir, path.dirname(objName)); fs.mkdirSync(objectDir, { recursive: true }); - const objectPath = path.join(bucketDir, obj.name); - const dataStream = await this.minioClient.getObject(bucket.name, obj.name); + const objectPath = path.join(bucketDir, objName); + const dataStream = await this.minioClient.getObject(bucketName, objName); const writeStream = fs.createWriteStream(objectPath); await new Promise((resolve, reject) => { @@ -92,7 +93,7 @@ export class MinioBackupHandler implements BackupHandler { downloadedObjects++; const percent = 5 + Math.floor((downloadedObjects / totalObjects) * 70); - onProgress(percent, `下载对象 ${downloadedObjects}/${totalObjects}: ${bucket.name}/${obj.name}`); + onProgress(percent, `下载对象 ${downloadedObjects}/${totalObjects}: ${bucketName}/${objName}`); } } @@ -123,12 +124,12 @@ export class MinioBackupHandler implements BackupHandler { } } - private async listAllObjects(bucket: string): Promise { + private async listAllObjects(bucket: string): Promise { return new Promise((resolve, reject) => { - const objects: Minio.BucketItem[] = []; + const names: string[] = []; const stream = this.minioClient.listObjects(bucket, '', true); - stream.on('data', (obj) => objects.push(obj)); - stream.on('end', () => resolve(objects)); + stream.on('data', (obj) => { if (obj.name) names.push(obj.name); }); + stream.on('end', () => resolve(names)); stream.on('error', reject); }); } diff --git a/backend/services/snapshot-service/src/infrastructure/infrastructure.module.ts b/backend/services/snapshot-service/src/infrastructure/infrastructure.module.ts index 57acb441..e7b9c1ae 100644 --- a/backend/services/snapshot-service/src/infrastructure/infrastructure.module.ts +++ b/backend/services/snapshot-service/src/infrastructure/infrastructure.module.ts @@ -47,10 +47,10 @@ import { BackupTarget } from '@/domain/enums'; .filter(Boolean); const allHandlers = [pg, redis, kafka, zk, minio, uploads]; - const handlerMap = new Map(); + const handlerMap = new Map(); for (const handler of allHandlers) { - if (availableTargets.includes(handler.target)) { + if (availableTargets.includes(handler.target as string)) { handlerMap.set(handler.target, handler); } } diff --git a/backend/services/snapshot-service/src/infrastructure/storage/minio-storage.adapter.ts b/backend/services/snapshot-service/src/infrastructure/storage/minio-storage.adapter.ts index 0ee94812..e67ab3e7 100644 --- a/backend/services/snapshot-service/src/infrastructure/storage/minio-storage.adapter.ts +++ b/backend/services/snapshot-service/src/infrastructure/storage/minio-storage.adapter.ts @@ -75,7 +75,7 @@ export class MinioStorageAdapter implements OnModuleInit { const stream = this.minioClient.listObjects(this.bucketName, prefix, true); await new Promise((resolve, reject) => { - stream.on('data', (obj) => objects.push(obj.name)); + stream.on('data', (obj) => { if (obj.name) objects.push(obj.name); }); stream.on('end', resolve); stream.on('error', reject); });