【发布时间】:2022-11-17 03:31:48
【问题描述】:
我正在尝试使用内置的 NestJS ValidationPipe 将一些查询参数从字符串转换为 int,但它似乎无法正常工作,
这是我的控制器:
import {
..., ValidationPipe
} from '@nestjs/common';
...
@UseGuards(JwtAuthGuard)
@Get()
findAll(@Req() req, @Query(new ValidationPipe({
transform: true,
transformOptions: { enableImplicitConversion: true },
forbidNonWhitelisted: true,
})) query: GetTestDto) {
return this.testService.findAll(query, req.user.id);
}
这是我的 DTO:
import { IsInt, IsOptional, IsString } from 'class-validator';
import { Transform } from 'class-transformer';
export class GetTestDto {
@IsOptional()
@IsString()
public search: string;
@IsOptional()
@Transform(({value}) => {
console.log(typeof value); // => string / I'm just testing here
return value
})
@IsInt()
public page: number;
@IsOptional()
@IsInt()
public limit: number;
}
主.ts:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import cookieParser from 'cookie-parser';
import { ValidationPipe } from '@nestjs/common';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.setGlobalPrefix('api');
app.use(cookieParser());
app.useGlobalPipes(new ValidationPipe());
await app.listen(3000);
}
bootstrap();
当我试着打电话给GET http://127.0.0.1:3000/api/test?page=1&limit=10时,我得到了这个
validation error from the DTO I think:
{
"statusCode": 400,
"message": [
"page must be an integer number",
"limit must be an integer number"
],
"error": "Bad Request"
}
我试过删除 node_modules 和 dist 文件夹,但没有任何改变。
我不想在 DTO 中使用 @Transform() 作为解决方案,我更希望管道使用 enableImplicitConversion: true 进行更改
我可以得到一些帮助吗?
谢谢
【问题讨论】:
标签: javascript node.js nestjs dto