问题描述
我想要做的是向来自 fastify 路由的架构响应添加验证。
按照 Fastify here 的文档,我们可以看到这一点
用于验证请求的 Ajv fast-json-stringify 用于响应正文的序列化
与改进和添加响应验证相关,我想做的是在发送响应时检查架构。
fast-json-stringify 支持不同的选项,包括格式,但如果你阅读文档,他们说他们支持 JSON 模式。 Jsonschema 支持电子邮件格式,您可以将 here 视为内置格式,但是当我尝试在 Fastify 上使用它时,如下所示:
{
response: {
200: {
type: 'object',required: ['email'],properties: {
email: {
type: 'string',format: 'email',}
}
}
}
}
并尝试返回广告响应
reply.code(200).send({ email: 'test' })
我唯一能做的验证是当我将类型设置为整数并尝试返回一个字符串时。
您是否知道是否可以使用带有 fast-json-stringify 的 ajv 格式来向响应模式添加验证并使用来自 ajv 的格式并添加新格式?
非常感谢!
解决方法
fast-json-stringify
进行序列化,而不是验证。
提供给它的 json 模式将仅用于序列化声明的 properties
和一些类型检查,如 integer
或 array
。
- 不支持
enum
关键字 -
format
关键字仅支持日期 as documented:
要实现您的目标,您应该使用此插件:fastify-response-validation
,它将在序列化过程之前添加响应正文的验证步骤。