我想从数据库中删除所有已经失效的无效json网络令牌。我正在使用TypeORM,我想必须为此使用查询生成器。
我的令牌实体有一列代表令牌过期的时间
@Column()
public expiresOn: Date;
我想设置一个cronjob,从数据库中删除所有过期的令牌。所以我现在有
@Interval(2000) // gets called every 2 seconds - for demo purposes
public async handleInterval(): Promise<void> {
const currentDate: Date = new Date();
const deleteExpiredTokensQuery: SelectQueryBuilder<Token> = this.tokensRepository.createQueryBuilder('token');
deleteExpiredTokensQuery.where('token.expiresOn <= :currentDate', { currentDate });
await deleteExpiredTokensQuery.delete();
}
不幸的是,尽管令牌在
上过期,但没有令牌被删除1970-01-19 07:32:20.093
那么如何解决我的查询?我认为普通查询会是
DELETE FROM tokens WHERE expiresOn < GETDATE()
更新
我认为我必须创建一个删除查询生成器
const deleteExpiredTokensQuery: DeleteQueryBuilder<Token> = this.tokensRepository.createQueryBuilder('token');
但是我得到这个错误
类型'SelectQueryBuilder'缺少以下属性 来自“ DeleteQueryBuilder”类型的信息:输出,返回, createDeleteExpression
答案 0 :(得分:1)
通过在delete()
上调用QueryBuilder
,仅将此查询声明为删除。要执行查询,您必须调用execute()
。参见docs for delete。
await this.tokensRepository
.createQueryBuilder('token')
.delete()
.where('token.expiresOn <= :currentDate', { currentDate })
.execute();
关于第二个问题:您不必显式指定变量的类型,因为它会自动推断出来。