我在 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);