|
|
1 månad sedan | |
|---|---|---|
| .bmad-core | 2 månader sedan | |
| .claude | 1 månad sedan | |
| .gitea | 1 månad sedan | |
| .github | 2 månader sedan | |
| .roo | 3 månader sedan | |
| docs | 1 månad sedan | |
| plant2-demo | 1 månad sedan | |
| public | 1 månad sedan | |
| scripts | 1 månad sedan | |
| src | 1 månad sedan | |
| tests | 1 månad sedan | |
| .env.example | 2 månader sedan | |
| .env.test.example | 2 månader sedan | |
| .gitignore | 1 månad sedan | |
| .npmrc | 5 månader sedan | |
| .rooignore | 5 månader sedan | |
| CLAUDE.md | 2 månader sedan | |
| Dockerfile | 1 månad sedan | |
| Dockerfile.test | 5 månader sedan | |
| README.md | 4 månader sedan | |
| components.json | 4 månader sedan | |
| docker-compose.yml | 2 månader sedan | |
| eslint.config.js | 2 månader sedan | |
| index.html | 4 månader sedan | |
| package.json | 1 månad sedan | |
| pnpm-lock.yaml | 2 månader sedan | |
| server.js | 3 månader sedan | |
| tsconfig.json | 1 månad sedan | |
| tsconfig.node.json | 1 månad sedan | |
| vite.config.ts | 2 månader sedan | |
| vitest.config.ts | 1 månad sedan |
错误表现:
date4.isValid is not a function
TypeError: date4.isValid is not a function
错误原因:
使用原生Date对象而非dayjs对象初始化日期组件
错误示例:
// 错误示例 - 使用原生Date对象
form.setFieldsValue({
noteDate: new Date(record.noteDate) // 导致验证失败
});
正确做法:
// 正确示例 - 使用dayjs对象
form.setFieldsValue({
noteDate: dayjs(record.noteDate) // 正常支持验证方法
});
错误表现:
路径参数无法正确解析,接口调用404
错误原因:
使用冒号:定义路径参数而非花括号{}
错误示例:
// 错误方式
path: '/:id'
正确做法:
// 正确方式
path: '/{id}'
错误表现:
数字/布尔型URL参数验证失败,提示类型错误
错误原因:
未使用z.coerce处理URL字符串参数到目标类型的转换
错误示例:
// 错误方式 - 直接使用z.number()
z.number().int().positive() // 无法处理字符串参数
// 错误方式 - 直接使用z.boolean()
z.boolean() // 无法处理字符串参数
正确做法:
// 正确方式 - 使用z.coerce.number()
z.coerce.number().int().positive() // 自动转换字符串参数
// 正确方式 - 使用z.coerce.boolean()
z.coerce.boolean() // 自动转换字符串参数
错误表现:
日期/数字类型参数验证失败,接口返回400错误
错误原因:
实体的创建/更新Schema中,日期、数字等类型未使用z.coerce进行类型转换
正确做法:
export const UpdateEntityDto = z.object({
price: z.coerce.number().multipleOf(0.01).optional().openapi({
description: '价格',
example: 89.99
}),
isActive: z.coerce.boolean().optional().openapi({
description: '是否激活',
example: false
}),
expireDate: z.coerce.date().optional().openapi({
description: '过期日期',
example: '2025-12-31T23:59:59Z'
})
});
错误表现:
TypeScript类型推断失败,提示属性不存在
错误原因:
访问带参数的路由类型时未正确使用数组语法
错误示例:
// 错误方式
InferResponseType<typeof zichanClient[':id'].$get, 200>
正确做法:
// 正确方式 - $get要加中括号
InferResponseType<typeof zichanClient[':id']['$get'], 200>
错误表现:
前端表单提交后后端验证失败,或前端验证通过但后端返回400
错误原因:
前端表单的必填/选填规则与后端实体的create/update schema不一致
正确做法:
CreateXXXDto,更新操作使用UpdateXXXDto