我想从已经过期的数据库中删除所有失效的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()
更新
我想我必须创建一个delete查询生成器
const deleteExpiredTokensQuery: DeleteQueryBuilder<Token> = this.tokensRepository.createQueryBuilder('token');
但是我得到了这个错误
类型'SelectQueryBuilder‘缺少’DeleteQueryBuilder‘类型中的下列属性: output,返回,createDeleteExpression
发布于 2020-01-11 13:23:42
通过在delete()
上调用QueryBuilder
,它只将此查询声明为删除。要执行查询,必须调用execute()
。见删除文档。
await this.tokensRepository
.createQueryBuilder('token')
.delete()
.where('token.expiresOn <= :currentDate', { currentDate })
.execute();
关于第二个问题:您不必显式地指定变量的类型,因为它是自动推断的。
https://stackoverflow.com/questions/59694478
复制相似问题