ASR*_*SR4 6 typescript fastify zod
我是 Fastify 和 Typescript 的新手。我正在添加 Zod 模式进行验证,但收到此错误:
/app/node_modules/fastify/lib/schemas.js:32
throw new FST_ERR_SCH_ALREADY_PRESENT(id)
^
FastifyError [Error]: Schema with id 'Schema' already declared!
at Schemas.add (/app/node_modules/fastify/lib/schemas.js:32:11)
at SchemaController.add (/app/node_modules/fastify/lib/schema-controller.js:58:30)
at Object.addSchema (/app/node_modules/fastify/fastify.js:601:29)
at /app/src/index.ts:23:12
at Generator.next (<anonymous>)
at /app/src/index.ts:8:71
at new Promise (<anonymous>)
at __awaiter (/app/src/index.ts:4:12)
at main (/app/src/index.ts:32:12)
at Object.<anonymous> (/app/src/index.ts:63:1) {
code: 'FST_ERR_SCH_ALREADY_PRESENT',
statusCode: 500
Run Code Online (Sandbox Code Playgroud)
来自 Fastify 文档:
FST_ERR_SCH_ALREADY_PRESENT
A schema with the same $id already exists.
Run Code Online (Sandbox Code Playgroud)
我不确定这是在哪里$id设置的
当我只有一个模式并将其添加到 fastify 中时,index.ts它正在工作:
for (const schema of userSchemas) {
server.addSchema(schema);
}
Run Code Online (Sandbox Code Playgroud)
但是添加另一个架构会引发上述错误:
for (const schema of [...userSchemas, ...teamSchemas]) {
server.addSchema(schema);
}
Run Code Online (Sandbox Code Playgroud)
package.json版本
"fastify": "^4.6.0",
"fastify-cors": "^6.1.0",
"fastify-zod": "^1.2.0",
"zod": "3.19.1",
"zod-to-json-schema": "^3.18.1"
Run Code Online (Sandbox Code Playgroud)
用户架构:
import { z } from 'zod';
import { buildJsonSchemas } from 'fastify-zod';
import {
CreateUserRequest,
UpdateUserRequest,
UserResponse
} from '../../services/user/interface';
const createUserSchema: z.ZodSchema<CreateUserRequest> = CreateUserRequest;
const updateUserSchema: z.ZodSchema<UpdateUserRequest> = UpdateUserRequest;
const responseUserSchema: z.ZodSchema<UserResponse> = UserResponse;
export const { schemas: userSchemas, $ref } = buildJsonSchemas({
createUserSchema,
updateUserSchema,
responseUserSchema
});
Run Code Online (Sandbox Code Playgroud)
团队架构
import { buildJsonSchemas } from 'fastify-zod';
import { z } from 'zod';
import {
CreateTeamRequest,
TeamResponse,
UpdateTeamRequest
} from '../../services/team/interface';
const createTeamSchema: z.ZodSchema<CreateTeamRequest> = CreateTeamRequest;
const updateTeamSchema: z.ZodSchema<UpdateTeamRequest> = UpdateTeamRequest;
const responseTeamSchema: z.ZodSchema<TeamResponse> = TeamResponse;
export const { schemas: teamSchemas, $ref } = buildJsonSchemas({
createTeamSchema,
updateTeamSchema,
responseTeamSchema
});
Run Code Online (Sandbox Code Playgroud)
看起来这是去年的一个问题,但此后已经解决: https: //github.com/fastify/fastify/issues/2914
知道我在这里可能缺少什么吗?
编辑:addSchema 之前的 console.log(schema) 给出:
{
'$id': 'Schema',
'$schema': 'http://json-schema.org/draft-07/schema#',
type: 'object',
properties: {
createUserSchema: {
type: 'object',
properties: [Object],
required: [Array],
additionalProperties: false
},
updateUserSchema: {
type: 'object',
properties: [Object],
additionalProperties: false
},
responseUserSchema: {
type: 'object',
properties: [Object],
required: [Array],
additionalProperties: false
}
},
required: [ 'createUserSchema', 'updateUserSchema', 'responseUserSchema' ],
additionalProperties: false
}
{
'$id': 'Schema',
'$schema': 'http://json-schema.org/draft-07/schema#',
type: 'object',
properties: {
createTeamSchema: {
type: 'object',
properties: [Object],
required: [Array],
additionalProperties: false
},
updateTeamSchema: {
type: 'object',
properties: [Object],
required: [Array],
additionalProperties: false
},
deleteTeamSchema: {
type: 'object',
properties: [Object],
required: [Array],
additionalProperties: false
},
responseTeamSchema: {
type: 'object',
properties: [Object],
required: [Array],
additionalProperties: false
}
},
required: [
'createTeamSchema',
'updateTeamSchema',
'deleteTeamSchema',
'responseTeamSchema'
],
additionalProperties: false
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1400 次 |
| 最近记录: |