gpt4 book ai didi

javascript - 如何验证nestjs中的查询参数

转载 作者:行者123 更新时间:2023-12-05 00:27:08 24 4
gpt4 key购买 nike

哟,我有使用nestjs的商店应用程序,我需要验证mongo id,这是通过查询传递的,问题是我也通过和搜索查询。我编写验证所有值的管道,并排除此搜索查询

@Injectable()
export class ValidationObjectId implements PipeTransform {
transform(value: UniqueId, metadata: ArgumentMetadata) {
if (
!Types.ObjectId.isValid(value) &&
metadata.data !== "searchString"
) {
throw new BadRequestException("Неверный параметр запроса");
}

return value;
}
}
但是此代码不可用于其他情况。我想要一些例子,我该怎么做

最佳答案

最干净和最可重用的方法可能是使用 ValidationPipe 和 Query-DTO-Class。
看看下面的例子。
https://gitlab.com/WaldemarLehner/nestjs-swagger-example/-/tree/1aea48597ddcf93b0a0d1449fe5087413415bbee
Controller 中,您可以将 Pipe 传递给 @Query() -Decorator。
您可以使用 Nest 自带的 ValidationPipe 并使用 class-validatorclass-transformer 包。
您可以像我的示例中的 PostHelloQuery.dto.ts 中所做的那样为您的查询参数创建一个 DTO 类。

import { IsBoolean, IsOptional } from "class-validator";

class PostHelloQueryDTO {
@IsOptional()
@IsBoolean()
public useExclamation?: boolean;
}
在这里,您使用来自 class-validator 的装饰器为您的数据定义约束。有关所有装饰器的列表,请参阅 https://github.com/typestack/class-validator#validation-decorators
如果没有一个验证器符合您的需求,您还可以创建自己的装饰器,如图 here 所示。
在我的示例中, useExclamation -Query 参数是一个可选的 bool 值。
请注意,传入的查询参数被解析为字符串。
转换是使用 Controller 中看到的 enableInplicitConversion -Option 完成的:
@Query(new ValidationPipe({
transform: true,
transformOptions: {enableImplicitConversion: true},
forbidNonWhitelisted: true
}) query: PostHelloQueryDTO
有关将 ValidationPipeclass-validator 一起使用的更多信息,您可以查看 NestJS 文档:
https://docs.nestjs.com/techniques/validation
对于您的特定用例(验证 MongoDB ID),我发现了一个 Unresolved 问题,其中包含 @IsMongoDB -Decorator 的示例实现:
https://github.com/typestack/class-validator/issues/630#issuecomment-645638436

关于javascript - 如何验证nestjs中的查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70225539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com