#node.js #rest #routing-controllers
#node.js #отдых #контроллеры маршрутизации
Вопрос:
допустим, у вас есть такой интерфейс:
import { Get, QueryParam } from 'routing-controllers';
// ...
@Get('/students')
async getStudents(
@QueryParam('count') count?: number,
): Promise<void> {
console.log(count);
}
Как вы гарантируете, что count является int, а не float, например? Что-то вроде этого недопустимо:
@IsInt() @QueryParam('count') count?: number,
IsInt можно использовать только для свойства класса, например, для модели тела, а не для одного значения параметра. Но согласно. это https://github.com/typestack/routing-controllers#auto-validating-action-params это возможно:
Этот метод работает не только с @Body, но и с @Param, @QueryParam, @BodyParam и другими декораторами.
Комментарии:
1. Число. isInteger (количество)
Ответ №1:
Я пропустил это в документах: https://github.com/typestack/routing-controllers#inject-query-parameters Вводя все параметры запроса вместо отдельных параметров запроса, вы можете проверить их как модель класса:
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
}
Кроме того, убедитесь, что вы не используете barrel-imports для импорта перечислений, иначе open-api-generator выдаст сообщение об ошибке, что перечисление не определено, а не объект and; например, избегайте этого: import { Roles } from '../..'