
本文介绍了如何使用 Zod 验证请求数据子集,并保留未在 Schema 中明确指定的字段。通过 passthrough() 方法,可以轻松实现未识别键的透传,避免数据丢失,从而更灵活地处理请求数据。
Zod 是一个流行的 TypeScript 优先的 schema 声明和验证库。默认情况下,Zod 会严格按照 schema 定义进行验证,过滤掉所有未在 schema 中定义的字段。但在某些场景下,我们希望保留这些未定义的字段,例如,只验证请求数据中的一部分,而将其他字段传递给后续的处理流程。这时,Zod 的 passthrough() 方法就派上用场了。
passthrough() 方法允许 Zod 将未识别的键直接传递。这意味着,即使请求数据中包含未在 schema 中定义的字段,Zod 也不会报错或过滤掉这些字段,而是将它们保留在解析后的结果中。
下面是一个示例,演示如何使用 passthrough() 方法:
import { z } from 'zod';
const schema = z.object({
params: z.object({ dependent_id: z.string() }),
})
const req = {
params: { dependent_id: "blah", bar: "baz" },
body: { foo: "bar" },
query: {}
}
const test = async () => {
const { params, body, query } = await schema.passthrough().parseAsync(req);
console.log("params: ", params)
console.log("body: ", body)
console.log("query: ", query)
}
test()在这个例子中,我们定义了一个 schema,只验证 params 对象中的 dependent_id 字段。但是,req 对象中还包含 params.bar、body.foo 和 query 字段,这些字段未在 schema 中定义。
通过在 schema 对象上调用 passthrough() 方法,我们告诉 Zod 保留所有未识别的键。因此,parseAsync() 方法返回的结果将包含所有原始字段,而不仅仅是 dependent_id。
输出结果如下:
params: { dependent_id: 'blah', bar: 'baz' }
body: { foo: 'bar' }
query: {}可以看到,params 对象现在包含 dependent_id 和 bar 字段,body 对象包含 foo 字段,query 对象为空对象,所有未定义的字段都被保留了下来。
总结:
passthrough() 方法是 Zod 中一个非常有用的功能,它允许我们灵活地处理请求数据,只验证我们关心的字段,而将其他字段传递给后续的处理流程。这在需要处理复杂请求数据或与第三方 API 集成时非常有用。
注意事项:
虽然 passthrough() 方法可以方便地保留未识别的键,但也需要注意潜在的安全风险。如果请求数据中包含恶意字段,可能会导致安全漏洞。因此,在使用 passthrough() 方法时,需要仔细审查请求数据,确保其安全性。
以上就是使用 Zod 实现未在 Schema 中定义的字段透传的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号