如何在 nestjs 中验证查询参数

编程入门 行业动态 更新时间:2024-10-10 13:14:32

如何在 nestjs 中验证查询<a href=https://www.elefans.com/category/jswz/34/1771441.html style=参数"/>

如何在 nestjs 中验证查询参数

哟,我有 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/WaldemarLehner/nestjs-swagger-example/-/tree/1aea48597ddcf93b0a0d1449fe5087413415bbee

在Controller内部,您可以将管道传递给

@Query()
-Decorator。 您可以使用 Nest 自带的
ValidationPipe
并使用
class-validator
class-transformer
包。

您可以为您的查询参数创建一个 DTO 类,就像在我的示例中的 PostHelloQuery.dto.ts 中所做的那样。

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

export class PostHelloQueryDTO {
    @IsOptional()
    @IsBoolean()
    public useExclamation?: boolean;
}

在这里,您可以使用

class-validator
中的装饰器为您的数据定义约束。所有装饰器的列表,请参考https://github/typestack/class-validator#validation-decorators.

如果没有任何验证器满足您的需求,您还可以创建自己的装饰器,如here所示。

在我的示例中,

useExclamation
-Query 参数是一个可选的布尔值。 请注意,传入的查询参数被解析为字符串。

转换是使用控制器中看到的

enableInplicitConversion
-选项完成的:

@Query(new ValidationPipe({
    transform: true,
    transformOptions: {enableImplicitConversion: true},
    forbidNonWhitelisted: true
})) query: PostHelloQueryDTO

有关将

ValidationPipe
class-validator
一起使用的更多信息,您可以查看NestJS文档:

https://docs.nestjs/techniques/validation

对于您的特定用例(验证 MongoDB ID),我发现了一个 Open Issue with an Example Implementation for a

@IsMongoDB
-Decorator:

https://github/typestack/class-validator/issues/630#issuecomment-645638436

更多推荐

如何在 nestjs 中验证查询参数

本文发布于:2024-05-13 15:39:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1759897.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:参数   如何在   nestjs

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!