可以注意到,当您使用 DTO 而不是管道(取决于具体情况)时,验证主体甚至路由/查询参数可以更简单、更安全且更具可读性。作为一个简单的示例,我喜欢使用 DTO 来验证 id 的想法,就像在 findOne() 路由中一样。所以,有了这样的课程
export class IdDto {
@IsInt()
@IsPositive()
id: number;
}
Run Code Online (Sandbox Code Playgroud)
我可以很好地验证(序列)id。并在路由处理程序中使用它,如下所示
findOne(@Param() { id }: IdDto)
Run Code Online (Sandbox Code Playgroud)
问题是当我有多个 id 作为路由参数时。显然我必须以不同的方式命名它们,然后我就不能再使用这个 DTO 了。除非我为像这样的每种情况创建一个特定的 DTO,只需重命名字段即可。在这种情况下,是否有任何方法可以维持此 DTO(或任何其他)的使用?或者真的没有其他选择吗?
当然,我可以建造自己的管道。只是 DTO 方法要简单得多,而且类验证器装饰器会自动显示验证失败的具体步骤。但也许这是除了多个类似的 DTO 之外的唯一选择。
预先致谢,并致以最诚挚的问候。
PS:在我提到的多个 id 的情况下,情况会稍微复杂一些。但如果我仍然只有一个 id,但想在路由中以不同的方式命名它?同样的问题也适用,以防它可能更简单。