首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将布尔查询参数转换为实际布尔值Nest.js

不能将布尔查询参数转换为实际布尔值Nest.js
EN

Stack Overflow用户
提问于 2022-08-21 13:48:18
回答 1查看 32关注 0票数 1

在我的API中,我创建了允许通过分页从数据库获取用户的端点:

代码语言:javascript
复制
@Get()
findByQuery(
  @Query() { skip, take, count }: QueryDto
): Promise<User[] | { rows: User[]; count: number }> {
  return this.userService.findByQuery(skip, take, count);
}

在使用QueryDtoclass-validator中,我为值制作了验证器,并为这些值使用了class-transformer解析器,因为默认情况下,它们只是字符串。

代码语言:javascript
复制
import { Transform } from 'class-transformer';
import { IsBoolean, IsNumber, IsOptional } from 'class-validator';

export class QueryDto {
  @Transform(({ value }) => parseInt(value))
  @IsNumber()
  skip: number;

  @Transform(({ value }) => parseInt(value))
  @IsNumber()
  take: number;

  @Transform(({ value }) => {
    return value === 'true';
  })
  @IsOptional()
  @IsBoolean()
  count?: boolean;
}

问题是,count字段的最后一个验证器无法工作。在服役中,它仍然只是字符串。

因此,例如,如果我确实这样请求- http://localhost:3000/api/user?skip=1&take=1&count=false - skiptake被正确地解析为数字,但是count总是字符串。

我怎么才能解决这个问题?

PS.

此外,我已经创建了自定义验证管道,现在我确信,如果问题可能出现在这里:

代码语言:javascript
复制
import { ArgumentMetadata, Injectable, PipeTransform } from '@nestjs/common';
import { plainToInstance } from 'class-transformer';
import { validate } from 'class-validator';
import { ValidationException } from '../exception/validation.exception';

@Injectable()
export class ValidationPipe implements PipeTransform<any> {
  async transform(value: any, metadata: ArgumentMetadata): Promise<any> {
    const obj = plainToInstance(metadata.metatype, value);
    const errors = await validate(obj);

    if (errors.length) {
      const messages = errors.map((err) => {
        return {
          [err.property]: `${Object.values(err.constraints).join(', ')}`
        };
      });
      throw new ValidationException({ errors: messages });
    }
    return value;
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-22 14:39:05

您的自定义管道应该返回objvalue是原始查询。我测试了你的代码。字段skiptake都是字符串。最后,建议使用内置ValidationPipe

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73435053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档