首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.JS:如何在路由控制器中验证QueryParams?

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

Stack Overflow用户
提问于 2020-11-19 20:34:51
回答 1查看 2.2K关注 0票数 1

假设您有这样一个接口:

代码语言:javascript
复制
import { Get, QueryParam } from 'routing-controllers';
// ...
@Get('/students')
async getStudents(
    @QueryParam('count') count?: number,
): Promise<void> {
    console.log(count);
}

例如,如何确保计数是整数而不是浮点数?像这样的东西是无效的:

代码语言:javascript
复制
@IsInt() @QueryParam('count') count?: number,

IsInt只能用于类属性,例如用于体模型,而不能用于单个参数值。但根据。这个https://github.com/typestack/routing-controllers#auto-validating-action-params是可能的:

这种技术不仅适用于“Body”,还适用于“Param”、“QueryParam”、“BodyParam”和其他装饰师。

EN

回答 1

Stack Overflow用户

发布于 2020-11-20 08:43:04

我在docs:https://github.com/typestack/routing-controllers#inject-query-parameters中忽略了这一点,通过注入所有的QueryParams而不是单独的QueryParam,您可以将它们作为类模型进行验证:

代码语言:javascript
复制
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 '../..'

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

https://stackoverflow.com/questions/64919564

复制
相关文章

相似问题

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