如何在 typeorm 和 nest.js 中设置布尔验证

Posted

技术标签:

【中文标题】如何在 typeorm 和 nest.js 中设置布尔验证【英文标题】:How to set boolean validation in typeorm and nest.js 【发布时间】:2021-01-14 21:18:39 【问题描述】:

我通过nest.jstypeorm 开发了应用程序。该实体的验证方式如下。

我对@9​​87654323@ 验证有一些疑问。

event.dto.ts

export class EventRequest 
    @IsInt()  
    id: number;
    
    @IsInt()
    userId: number;
    
    @IsString()
    title: string;
      
    @IsDateString()
    date: Date;
    
    @IsBoolean()
    islastDate: boolean;

event.entity.ts

 @Entity('events')
  export class Event extends BaseEntity 
    @PrimaryGeneratedColumn('increment',  type: 'int' )
    id: number;
  
    @ManyToOne(type => User, user => user.events)
    @JoinColumn()
    readonly user?: User;
    userId: User;

    @Column('varchar')
    title: string;
  
    @Column('date')
    date: Date;
  
    @Column('bool')
    isLastdate: boolean;

我向服务器发送以下请求


"id":0,
"userId":1,
"title":"mytest",
"date":"2011-10-05T14:48:00.000Z",
"isLastdate":0,
"beginTime":"2011-10-05T14:48:00.000Z",
"endTime":"2011-10-05T14:48:00.000Z",
"place":"Tokyo",
"labelCd":1,
"detail":"test"

返回以下错误。 我应该为boolean 设置什么值?


    "statusCode": 400,
    "message": [
        "islastDate must be a boolean value"
    ],
    "error": "Bad Request"

这是我上面生成的DB 实体。


mysql> desc events;
+------------+--------------+------+-----+----------------------+----------------+
| Field      | Type         | Null | Key | Default              | Extra          |
+------------+--------------+------+-----+----------------------+----------------+
| id         | int(11)      | NO   | PRI | NULL                 | auto_increment |
| title      | varchar(255) | NO   |     | NULL                 |                |
| date       | date         | NO   |     | NULL                 |                |
| place      | varchar(255) | NO   |     | NULL                 |                |
| detail     | varchar(255) | NO   |     | NULL                 |                |
| createdAt  | datetime(6)  | NO   |     | CURRENT_TIMESTAMP(6) |                |
| updatedAt  | datetime(6)  | NO   |     | CURRENT_TIMESTAMP(6) |                |
| deletedAt  | datetime(6)  | YES  |     | NULL                 |                |
| beginTime  | time         | NO   |     | NULL                 |                |
| endTime    | time         | NO   |     | NULL                 |                |
| labelCd    | int(11)      | NO   |     | NULL                 |                |
| userId     | int(11)      | YES  | MUL | NULL                 |                |
| isLastdate | tinyint(4)   | NO   |     | NULL                 |                |
+------------+--------------+------+-----+----------------------+----------------+

我的理解有问题吗?

什么是布尔值?

谢谢

【问题讨论】:

【参考方案1】:

您的请求数据中有错字,您的 DTO 中有 islastDate: boolean;,实体文件中有 isLastdate: boolean;。改变一个以匹配另一个,你应该没问题。

【讨论】:

【参考方案2】:

我还试图更新我的实体中的一个布尔值,但是由 typeorm 生成的查询总是发送 0 无论我传递的是真还是假,替换 PUT 方法是 POST 方法就可以了我。 我还通过首先创建这些参数的 Dto 来传递参数,即为参数生成类型

【讨论】:

以上是关于如何在 typeorm 和 nest.js 中设置布尔验证的主要内容,如果未能解决你的问题,请参考以下文章

nest.js + typeORM:基本使用

Nest js 和 typeorm 自定义存储库问题

Nest.js + TypeORM + OpenApi 中虚拟(计算)列的最佳实践

Nest.js TypeORM 连接到本地数据库(在 docker 容器上)

nest.js + typeORM:身份认证,事务管理

在 Nest JS / TypeORM 中使用具有关系的实体内部的实体并填充数据库