refactor(api): 请求体解析收成 readJson / parseBody
54 处 handler 都手写同一段: const parsed = X.safeParse(await c.req.json().catch(() => null)) if (!parsed.success) return failure(c, 400, "invalid-request", ...) 漏写 .catch 就是一个畸形请求打出 500。 - http.ts 加 readJson(读 + 校验)和 parseBody(再加上 400)。parseBody 不给 message 时回 zod 的第一条 issue —— 后台表单原来就是这么写的,fallback 文案 「Invalid payload」/「参数错误」只在 issues 为空时才用得上,实际走不到 - 51 处换成 parseBody;另 3 处失败时带别的错误码或和路径参数一起判,换成 readJson - 错误码、状态码、文案、判断顺序都不变 实跑核过:非 JSON 请求体回原来的固定文案,公告标题为空回 zod issue。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c43da01ff2
commit
f2ca34fd4b
21 files changed
+234
-432
No files matched your search
@@ -6,7 +6,7 @@ import { z } from "zod"
|
||||
|
||||
import { config } from "../config"
|
||||
import { db, schema } from "../db"
|
||||
import { failure } from "../http"
|
||||
import { failure, readJson } from "../http"
|
||||
|
||||
const heartbeatSchema = z.object({
|
||||
hostname: z.string().min(1).max(128),
|
||||
@@ -38,7 +38,7 @@ async function heartbeat(c: Context) {
|
||||
return failure(c, 403, "invalid-judge-token", "Invalid token")
|
||||
}
|
||||
|
||||
const parsed = heartbeatSchema.safeParse(await c.req.json().catch(() => null))
|
||||
const parsed = await readJson(c, heartbeatSchema)
|
||||
if (!parsed.success) {
|
||||
return failure(c, 400, "invalid-heartbeat", "Invalid heartbeat payload")
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user