TypeORM条件可为空?

Thanh-Quy Nguyen

我正在使用TypeORM和Postgres在NestJS中开发一个登录系统。在我的登录选项中,我建议用户使用几封电子邮件/密码或使用OAuth身份验证。但是,一旦创建了帐户,它们就不会相互排斥(例如,用户可以将电子邮件+密码和Google帐户附加到其帐户中)。

因此,我想使密码或OAuthLogin可以为空,但是其中至少一个永远不能为空。

使用TypeORM是否可以实现此目的?

@Entity()
class User {
    @PrimaryGeneratedColumn()
    public id: number;

    @Column({ unique: true })
    public email: string;

    @Column({ nullable: true })
    @Exclude()
    public password?: string;

    @JoinColumn()
    @OneToMany(() => OAuthLogin, (provider: OAuthLogin) => provider.user, {
        cascade: true,
    })
    public oAuthLogins: OAuthLogin[];
}

export default User;

(PS:对于我当前的代码,我选择使密码只能为空...)

杰弗里·米克森

简短的答案是“否”,而不是在TypeORM级别。但是,您可以使用以下代码中的ValidateIf装饰器在应用程序代码中实现此目标class-validator

@Column({ nullable: true })
@Exclude()
@IsNotEmpty()
@ValidateIf(u => !u.oAuthLogins || u.oAuthLogins.length === 0)
public password?: string;

@JoinColumn()
@IsArray()
@ValidateIf(u => !u.password)
@OneToMany(() => OAuthLogin, (provider: OAuthLogin) => provider.user, {
cascade: true,
})
public oAuthLogins?: OAuthLogin[];

您的应用程序中的其他地方:

import { validate } from 'class-validator';
...
validate(user)

如果这个实体渡控制器,你也可以使用NestJS的ValidationPipe,以在控制器或应用程序执行本级别:

// main.ts
app.useGlobalPipes(new ValidationPipe({ whitelist: true }));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

TypeORM条件可为空?

来自分类Dev

Typescript中可为空的条件类型

来自分类Dev

Kotlin中的条件可为空的返回类型

来自分类Dev

如何使用typeorm将可为空的数据库字段设置为NULL?

来自分类Dev

Typescript可为空的数组

来自分类Dev

LINQ-在有条件的情况下为可选/可为空

来自分类Dev

是否可以在不锁定的情况下有条件地更新可为空的 long?

来自分类Dev

从流中过滤可为空的值并更新可为空的属性

来自分类Dev

从可为空的类型中提取不可为空的类型定义

来自分类Dev

覆盖@JoinColumn可为空的值

来自分类Dev

LINQ和可为空的参数

来自分类Dev

转换为可为空的枚举

来自分类Dev

检查OpenFileDialog的可为空结果

来自分类Dev

PostgreSQL可为空的外键

来自分类Dev

如何使用可为空的布尔

来自分类Dev

可为空,结果令人惊讶

来自分类Dev

可为空的通用引用类型

来自分类Dev

哪些Unity类型可为空?

来自分类Dev

Moshi无法解析可为空的

来自分类Dev

PHP可为空的类型声明

来自分类Dev

使列在Ingres中可为空

来自分类Dev

Linq排序与可为空的对象

来自分类Dev

检查范围的可为空状态

来自分类Dev

非可空列的UNION可为空

来自分类Dev

具有可为空布尔值的条件表达式会产生编译器错误

来自分类Dev

在XAML中设置可为空的TimeSpan

来自分类Dev

获取值或可为空的变量的null

来自分类Dev

如何使Integer实例不可为空

来自分类Dev

Kotlin mutableMap.put返回可为空