假设您有这样一个接口:
import { Get, QueryParam } from 'routing-controllers';
// ...
@Get('/students')
async getStudents(
@QueryParam('count') count?: number,
): Promise<void> {
console.log(count);
}例如,如何确保计数是整数而不是浮点数?像这样的东西是无效的:
@IsInt() @QueryParam('count') count?: number,IsInt只能用于类属性,例如用于体模型,而不能用于单个参数值。但根据。这个https://github.com/typestack/routing-controllers#auto-validating-action-params是可能的:
这种技术不仅适用于“Body”,还适用于“Param”、“QueryParam”、“BodyParam”和其他装饰师。
发布于 2020-11-20 08:43:04
我在docs:https://github.com/typestack/routing-controllers#inject-query-parameters中忽略了这一点,通过注入所有的QueryParams而不是单独的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
}此外,请确保不使用桶导入导入enum,否则open生成器将产生一个错误,即enum是未定义的和非对象的;例如避免以下内容:import { Roles } from '../..'。
https://stackoverflow.com/questions/64919564
复制相似问题