Skip to content

Commit 595a6a0

Browse files
committed
refactor: replace catch any with unknown narrowing and simplify axios config
1 parent e21a55c commit 595a6a0

File tree

10 files changed

+66
-43
lines changed

10 files changed

+66
-43
lines changed

server/api/docker/assemble-image.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
getRepoTagName,
99
getSafeFileBaseName,
1010
} from "~/server/utils/imageName";
11+
import { getErrorMessage } from "~/server/utils/http-error";
1112
import { logger } from "~/server/utils/logger";
1213

1314
// 请求参数接口
@@ -216,7 +217,8 @@ export default defineEventHandler(async (event) => {
216217
});
217218

218219
return sendStream(event, tarStream);
219-
} catch (error: any) {
220+
} catch (error: unknown) {
221+
const message = getErrorMessage(error);
220222
// 清理临时目录
221223
try {
222224
await fs.rm(tmpDir, { recursive: true, force: true });
@@ -227,12 +229,12 @@ export default defineEventHandler(async (event) => {
227229
logger.error("assemble failed", {
228230
imageName,
229231
tag,
230-
message: error.message,
232+
message,
231233
elapsedMs: Date.now() - startedAt,
232234
});
233235
throw createError({
234236
statusCode: 500,
235-
message: error.message,
237+
message,
236238
});
237239
}
238240
});

server/api/docker/manifest-detail.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// 请求参数接口
22
import axiosInstance from "~/server/config/axios";
33
import { normalizeImageName } from "~/server/utils/imageName";
4+
import { getErrorMessage, getErrorStatusCode } from "~/server/utils/http-error";
45
import { logger } from "~/server/utils/logger";
56

67
type QueryParams = {
@@ -62,15 +63,16 @@ export default defineEventHandler(
6263
layers: result.layers?.length || 0,
6364
});
6465
return result;
65-
} catch (error: any) {
66+
} catch (error: unknown) {
67+
const message = getErrorMessage(error);
6668
logger.error("manifest detail failed", {
6769
imageName,
6870
digest,
69-
message: error.message,
71+
message,
7072
});
7173
throw createError({
72-
statusCode: error.response?.status || 500,
73-
message: error.message,
74+
statusCode: getErrorStatusCode(error),
75+
message,
7476
});
7577
}
7678
}

server/api/docker/manifest.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// 请求参数接口
22
import axiosInstance from "~/server/config/axios";
33
import { normalizeImageName } from "~/server/utils/imageName";
4+
import { getErrorMessage, getErrorStatusCode } from "~/server/utils/http-error";
45
import { logger } from "~/server/utils/logger";
56

67
type QueryParams = {
@@ -102,11 +103,12 @@ export default defineEventHandler(async (event): Promise<ManifestResponse> => {
102103
count: normalized.manifests.length,
103104
});
104105
return normalized;
105-
} catch (error: any) {
106-
logger.error("manifest failed", { imageName, tag, message: error.message });
106+
} catch (error) {
107+
const message = getErrorMessage(error);
108+
logger.error("manifest failed", { imageName, tag, message });
107109
throw createError({
108-
statusCode: error.response?.status || 500,
109-
message: error.message,
110+
statusCode: getErrorStatusCode(error),
111+
message,
110112
});
111113
}
112114
});

server/api/docker/pull-image.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { createWriteStream, existsSync, mkdirSync, statSync } from "fs";
22
import { join } from "path";
33
import axiosInstance from "~/server/config/axios";
4+
import { getErrorMessage } from "~/server/utils/http-error";
45
import { normalizeImageName } from "~/server/utils/imageName";
56
import { logger } from "~/server/utils/logger";
67

@@ -188,8 +189,9 @@ export default defineEventHandler(async (event) => {
188189
digest: layer.digest,
189190
skipped: false,
190191
};
191-
} catch (error: any) {
192-
if (String(error?.message).toLowerCase().includes("timeout")) {
192+
} catch (error: unknown) {
193+
const message = getErrorMessage(error);
194+
if (message.toLowerCase().includes("timeout")) {
193195
return {
194196
success: false,
195197
digest: layer.digest,
@@ -199,7 +201,7 @@ export default defineEventHandler(async (event) => {
199201
return {
200202
success: false,
201203
digest: layer.digest,
202-
error: error.message,
204+
error: message,
203205
};
204206
} finally {
205207
clearTimeout(timeoutId);
@@ -287,11 +289,12 @@ export default defineEventHandler(async (event) => {
287289

288290

289291
return;
290-
} catch (error: any) {
291-
logger.error("pull failed", { imageName, message: error.message });
292+
} catch (error: unknown) {
293+
const message = getErrorMessage(error);
294+
logger.error("pull failed", { imageName, message });
292295
throw createError({
293296
statusCode: 500,
294-
message: error.message,
297+
message,
295298
});
296299
}
297300
});

server/api/docker/search.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import axiosInstance from "~/server/config/axios";
2+
import { getErrorMessage, getErrorStatusCode } from "~/server/utils/http-error";
23
import { logger } from "~/server/utils/logger";
34

45
type QueryParams = {
@@ -82,11 +83,12 @@ export default defineEventHandler(async (event): Promise<ApiSearchResponse> => {
8283
count: response.data.count ?? mapped.length,
8384
results: sorted,
8485
};
85-
} catch (error: any) {
86-
logger.error("search failed", { query: q, page, pageSize, message: error.message });
86+
} catch (error: unknown) {
87+
const message = getErrorMessage(error);
88+
logger.error("search failed", { query: q, page, pageSize, message });
8789
throw createError({
88-
statusCode: error.response?.status || 500,
89-
message: error.message,
90+
statusCode: getErrorStatusCode(error),
91+
message,
9092
});
9193
}
9294
});

server/api/docker/tags.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import axiosInstance from "~/server/config/axios";
2+
import { getErrorMessage, getErrorStatusCode } from "~/server/utils/http-error";
23
import { normalizeImageName } from "~/server/utils/imageName";
34
import { logger } from "~/server/utils/logger";
45

@@ -80,15 +81,16 @@ export default defineEventHandler(async (event): Promise<ApiTagResponse> => {
8081
count: response.data.count ?? mapped.length,
8182
results: sorted,
8283
};
83-
} catch (error: any) {
84-
const statusCode = error.response?.status || 500;
84+
} catch (error: unknown) {
85+
const statusCode = getErrorStatusCode(error);
86+
const message = getErrorMessage(error);
8587
if (statusCode === 404) {
8688
return { count: 0, results: [] };
8789
}
88-
logger.error("tags failed", { imageName, page, pageSize, message: error.message });
90+
logger.error("tags failed", { imageName, page, pageSize, message });
8991
throw createError({
9092
statusCode,
91-
message: error.message,
93+
message,
9294
});
9395
}
9496
});

server/api/docker/token.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// 请求参数接口
22
import axiosInstance from "~/server/config/axios";
33
import { normalizeImageName } from "~/server/utils/imageName";
4+
import { getErrorMessage, getErrorStatusCode } from "~/server/utils/http-error";
45
import { logger } from "~/server/utils/logger";
56

67
type QueryParams = {
@@ -47,11 +48,12 @@ export default defineEventHandler(async (event): Promise<ApiResponse> => {
4748
return {
4849
token: authResponse.token,
4950
};
50-
} catch (error: any) {
51-
logger.error("token failed", { imageName, scope, message: error.message });
51+
} catch (error: unknown) {
52+
const message = getErrorMessage(error);
53+
logger.error("token failed", { imageName, scope, message });
5254
throw createError({
53-
statusCode: error.response?.status || 500,
54-
message: error.message,
55+
statusCode: getErrorStatusCode(error),
56+
message,
5557
});
5658
}
5759
});

server/config/axios.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,11 @@ import axios, {AxiosInstance} from "axios";
33

44
const proxyUrl = process.env.HTTPS_PROXY || process.env.HTTP_PROXY
55

6-
// @ts-ignore
7-
let axiosInstance: AxiosInstance = undefined;
8-
if (proxyUrl) {
9-
let httpsAgent = new HttpsProxyAgent(proxyUrl);
10-
axiosInstance = axios.create({
11-
httpsAgent: httpsAgent,
12-
proxy: false
13-
});
14-
} else {
15-
axiosInstance = axios.create();
16-
}
6+
const axiosInstance: AxiosInstance = proxyUrl
7+
? axios.create({
8+
httpsAgent: new HttpsProxyAgent(proxyUrl),
9+
proxy: false,
10+
})
11+
: axios.create();
1712

18-
export default axiosInstance
13+
export default axiosInstance

server/config/pullConfig.ts

Lines changed: 0 additions & 2 deletions
This file was deleted.

server/utils/http-error.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import axios from "axios";
2+
3+
export const getErrorMessage = (error: unknown): string => {
4+
if (error instanceof Error) {
5+
return error.message;
6+
}
7+
return "request failed";
8+
};
9+
10+
export const getErrorStatusCode = (error: unknown, fallback = 500): number => {
11+
if (axios.isAxiosError(error)) {
12+
return error.response?.status ?? fallback;
13+
}
14+
return fallback;
15+
};

0 commit comments

Comments
 (0)