Skip to content
This repository was archived by the owner on Nov 12, 2025. It is now read-only.

Commit 15a0788

Browse files
committed
feat(github): 添加速率限制错误处理
- 在 errorMsg.ts 中添加了新的错误消息 RateLimitMsg - 在 github/base.ts 中增加了对 422 状态码的检查,抛出速率限制错误 - 优化了错误处理逻辑,使用 try-catch 捕获请求过程中的异常
1 parent d348c40 commit 15a0788

File tree

2 files changed

+31
-15
lines changed

2 files changed

+31
-15
lines changed

src/common/errorMsg.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,5 @@ export const isNotAccessTokeMsg = '喵呜~ 这个令牌似乎不是有效的'
3030
export const isNotSuccessAccessTokenMsg = '喵呜~ 获取访问令牌失败'
3131
export const isOrgMsg = '喵呜~ 组织账号暂不支持'
3232
export const isNotWebHookSignatureMsg = '喵呜~ WebHook 签名格式不正确'
33+
34+
export const RateLimitMsg = '喵呜~ 访问速率受限啦 请等待1小时后再试 或 使用访问令牌提升限额'

src/models/platform/github/base.ts

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { URL } from 'node:url'
22

33
import jwt from 'jsonwebtoken'
44

5-
import { isNotAccessTokeMsg, NotProxyAddressMsg } from '@/common'
5+
import { isNotAccessTokeMsg, NotProxyAddressMsg, RateLimitMsg } from '@/common'
66
import { ApiBaseUrl, BaseUrl } from '@/models/base/common'
77
import Request from '@/models/base/request'
88
import { App } from '@/models/platform/github/app'
@@ -295,13 +295,20 @@ export class Base {
295295
* @returns 请求结果
296296
*/
297297
public async get (path: string, parms?: any, customHeaders?: Record<string, string>): Promise<ApiResponseType> {
298-
const request = this.createRequest()
299-
const req = await request.get(path, parms, customHeaders)
300-
return {
301-
status: req.success ? 'ok' : 'error',
302-
statusCode: req.statusCode,
303-
msg: req.msg,
304-
data: req.data
298+
try {
299+
const request = this.createRequest()
300+
const req = await request.get(path, parms, customHeaders)
301+
if (req.statusCode === 403 && req.data.message.includes('API rate limit exceeded')) {
302+
throw new Error(RateLimitMsg)
303+
}
304+
return {
305+
status: req.success ? 'ok' : 'error',
306+
statusCode: req.statusCode,
307+
msg: req.msg,
308+
data: req.data
309+
}
310+
} catch (error) {
311+
throw new Error(`GET 请求${path}失败: ${(error as Error).message}`)
305312
}
306313
}
307314

@@ -313,13 +320,20 @@ export class Base {
313320
* @returns 请求结果
314321
*/
315322
public async post (path: string, data: any, customHeaders?: Record<string, string>): Promise<ApiResponseType> {
316-
const request = this.createRequest()
317-
const req = await request.post(path, data, customHeaders)
318-
return {
319-
status: req.success ? 'ok' : 'error',
320-
statusCode: req.statusCode,
321-
msg: req.msg,
322-
data: req.data
323+
try {
324+
const request = this.createRequest()
325+
const req = await request.post(path, data, customHeaders)
326+
if (req.statusCode === 403 && req.data.message.includes('API rate limit exceeded')) {
327+
throw new Error(RateLimitMsg)
328+
}
329+
return {
330+
status: req.success ? 'ok' : 'error',
331+
statusCode: req.statusCode,
332+
msg: req.msg,
333+
data: req.data
334+
}
335+
} catch (error) {
336+
throw new Error(`POST 请求${path}失败: ${(error as Error).message}`)
323337
}
324338
}
325339
}

0 commit comments

Comments
 (0)