0

我在 NestJS 中有一个应用程序,当请求创建一个对象时,它会验证一个具有相同名称和一些其他参数的对象不存在,在这些验证中,该过程大约需要 30 秒,然后才能实际保存。但是当从角度前面多次按下“创建”按钮发出几个请求时,第一个的过程还没有完成,所有的请求都通过了,因为系统的名称还不存在,因为对象是尚未使用此名称保存。最后,对象最终被保存为重复项。

我知道可以通过从前面禁用“创建”按钮直到获得响应来避免这种情况。

但是我后面的任务也是防止这个错误,我可以在接收请求时想到一个 set.timeout,但我不确定,最重要的是,只允许每个用户每隔“x”时间发出一个请求。

任何想法,我的代码中有这样的摘录:

async createRole(role: RoleDto, permissions) {
    const { Name, Account } = role;

    if (!Name)
        throw new UnprocessableEntityException(
            'The Name must be provided.',
        );

    if (!Account)
        throw new UnprocessableEntityException(
            'The Account must be provided.',
        );
    const roleExist = await this.rolesRepository.findOne({
        where: { Name, Account },
    });
    if (roleExist)
        throw new ConflictException(
            'Name has been already used on this corporation.',
        );
    var roleToSave = new Role();
    roleToSave.Name = Name;
    roleToSave.Account = Account;
    roleToSave = await this.rolesRepository.save(roleToSave);
4

0 回答 0