【问题标题】:Node.JS: How do you validate QueryParams in routing-controllers?Node.JS:如何在路由控制器中验证 QueryParams?
【发布时间】:2021-03-03 06:49:44
【问题描述】:

假设你有一个这样的界面:

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 和其他装饰器。

【问题讨论】:

  • Number.isInteger (count)

标签: node.js rest routing-controllers


【解决方案1】:

我在文档中错过了这一点:https://github.com/typestack/routing-controllers#inject-query-parameters 通过注入所有 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
}

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

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 2019-12-12
    相关资源
    最近更新 更多