我有一个 API 并且正在尝试发送请求。这是有效的,但我注意到在收到回复后,这些类并没有被销毁。我目前正在使用 NestJS,但是当我尝试测试时,nodeJS + ExpressJS 也遇到了这个问题。
我正在使用以下代码:
@Injectable()
export class UsersService {
s = '';
constructor() {}
async findAll(): Promise<any> {
this.s += ' haha ';
return await this.s;
}
}
这返回了haha
第一次haha haha
第二次以此类推。
我不太确定这是否是所需的行为,或者可能没有正确配置,因为我现在刚刚学习 NestJS。我以前使用过 Zend Framework,但没有显示此行为。
任何指导将不胜感激。
谢谢。
随着nest.js 6.0的发布,注射范围 https://docs.nestjs.com/providers#scopes添加。这样,您可以为您的提供商选择以下三个范围之一:
-
单例:默认行为。您的提供者的一个实例用于整个应用程序
-
短暂的:为每个注入它的提供程序创建一个专用的提供程序实例。
-
REQUEST:对于每个请求,都会创建一个新的提供者。注意:此行为将在您的依赖链中出现。示例:如果 UsersController (Singleton) 注入 UsersService (Singleton),而 UsersService (Singleton) 又注入 OtherService (Request),则 UsersController 和 UsersService 都将自动成为请求范围。
Usage
要么将其添加到@Injectable()
装饰器:
@Injectable({ scope: Scope.REQUEST })
export class UsersService {}
或者在模块定义中为自定义提供程序设置它:
{
provide: 'CACHE_MANAGER',
useClass: CacheManager,
scope: Scope.TRANSIENT,
}
您正在寻找的是请求范围内的提供商。 Nest v5 不支持它们,请参阅这个问题 https://github.com/nestjs/nest/issues/1376。就目前而言,所有提供者都是单例。
他们被添加了这个拉取请求 https://github.com/nestjs/nest/pull/1405不过,它将成为 Nest v6 的一部分。在新版本中,我们将获得瞬态和每个请求的范围。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)