Node.JS:如何在路由控制器中验证QueryParams?

Node.JS:如何在路由控制器中验证QueryParams?,node.js,rest,routing-controllers,Node.js,Rest,Routing Controllers,假设您有这样一个界面: import { Get, QueryParam } from 'routing-controllers'; // ... @Get('/students') async getStudents( @QueryParam('count') count?: number, ): Promise<void> { console.log(count); } IsInt只能用于类属性,例如用于实体模型,而不能用于单个参数值。但据报道。这是可能的: 此

假设您有这样一个界面:

import { Get, QueryParam } from 'routing-controllers';
// ...
@Get('/students')
async getStudents(
    @QueryParam('count') count?: number,
): Promise<void> {
    console.log(count);
}
IsInt只能用于类属性,例如用于实体模型,而不能用于单个参数值。但据报道。这是可能的:

此技术不仅适用于@Body,也适用于@Param, @QueryParam、@BodyParam和其他装饰程序


我在文档中遗漏了这一点:通过注入所有QueryParam而不是单个QueryParam,可以将它们作为类模型进行验证:

enum Roles {
    Admin = "admin",
    User = "user",
    Guest = "guest",
}

class GetUsersQuery {

    @IsPositive()
    limit: number;

    @IsAlpha()
    city: string;

    @IsEnum(Roles)
    role: Roles;

    @IsBoolean()
    isActive: boolean;

}

@Get("/users")
getUsers(@QueryParams() query: GetUsersQuery) {
    // here you can access query.role, query.limit
    // and others valid query parameters
}

另外,请确保不要使用桶导入来导入枚举,否则打开api生成器将产生一个错误,即枚举未定义且不是和对象;例如,避免这种情况:
import{Roles}from'../..'

我在文档中遗漏了这一点:通过注入所有QueryParam而不是单个QueryParam,可以将它们作为类模型进行验证:

enum Roles {
    Admin = "admin",
    User = "user",
    Guest = "guest",
}

class GetUsersQuery {

    @IsPositive()
    limit: number;

    @IsAlpha()
    city: string;

    @IsEnum(Roles)
    role: Roles;

    @IsBoolean()
    isActive: boolean;

}

@Get("/users")
getUsers(@QueryParams() query: GetUsersQuery) {
    // here you can access query.role, query.limit
    // and others valid query parameters
}
另外,请确保不要使用桶导入来导入枚举,否则打开api生成器将产生一个错误,即枚举未定义且不是和对象;例如,避免这种情况:
从“....”导入{Roles}

Number.isInteger(count)Number.isInteger(count)