【发布时间】:2021-02-14 12:34:15
【问题描述】:
这似乎是一个很容易回答的问题,但要找到答案似乎是不可能的。
我正在使用 Express 和 Typescript 为后端应用程序构建密码重置功能。我使用 Postgres 作为数据库,使用 Typeorm 进行数据操作。我的数据库中有一个 User 实体,其中包含这两列:
@Column({
unique: true,
nullable: true,
})
resetPasswordToken!: string;
@Column({ nullable: true, type: 'timestamp with time zone' })
resetPasswordExpiresAt!: Date;
当用户请求密码重置令牌时,resetPasswordToken 和 resetPasswordExpiresAt 字段都会填充所需的值。使用发送到用户电子邮件地址的令牌,用户可以重置他/她的密码。用户密码重置后,我想通过设置为null来清除这两个字段:
user.resetPasswordToken = null;
user.resetPasswordExpiresAt = null;
user.save()
但是如果我这样做,Typescript 会抱怨我分配 null 值的两行:
类型“null”不能分配给类型“string”。
和
类型“null”不能分配给类型“Date”。
如果我将实体中的列更改为接受 null,如下所示,错误就会消失:
resetPasswordToken!: string | null;
...
resetPasswordExpiresAt!: Date | null;
但是当我启动我的 Express 应用程序时,当 Typeorm 尝试连接到我的数据库时出现以下错误:
“postgres”数据库不支持“User.resetPasswordToken”中的数据类型“Object”。
如何将这些字段设置为null?
【问题讨论】:
-
您使用的 ts-node 版本是多少?在这里查看:github.com/TypeStrong/ts-node/issues/569
-
@Mahdi 我正在使用最新版本(9.0.0)的 ts-node。您发送给我的链接中的解决方案对我不起作用。
-
您的问题在这里讨论和回答github.com/typeorm/typeorm/issues/2567
标签: typescript postgresql express typeorm