Maple's Blog.

Nestjs Provider

字数统计: 204阅读时长: 1 min
2023/08/31

基础使用

1
2
3
4
5
6
7
8
9
10
11
12
13
// cat.service.ts

import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';

@Injectable()
export class CatsService {
private readonly cats: Cat[] = [];

findAll(): Cat[] {
return this.cats;
}
}
1
2
3
4
5
6
7
8
9
// App.module.ts

@Module({
controllers: [CatController],
providers: [CatService]
})
export class AppModule {

}

Value Provider

用于替换 class 的对象。可用于 mock。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { CatsService } from './cats.service';

const mockCatsService = {
/* mock implementation
...
*/
};

@Module({
imports: [CatsModule],
providers: [
{
provide: CatsService,
useValue: mockCatsService,
},
],
})
export class AppModule {}

Non-class-based provider tokens

用于传递参数和配置。

1
2
3
4
5
6
7
8
9
10
11
import { connection } from './connection';

@Module({
providers: [
{
provide: 'CONNECTION',
useValue: connection,
},
],
})
export class AppModule {}

使用方式:

1
2
3
4
@Injectable()
export class CatsRepository {
constructor(@Inject('CONNECTION') connection: Connection) {}
}

Class providers

用于通过参数的方式来传递类。

1
2
3
4
5
6
7
8
9
10
11
12
const configServiceProvider = {
provide: ConfigService,
useClass:
process.env.NODE_ENV === 'development'
? DevelopmentConfigService
: ProductionConfigService,
};

@Module({
providers: [configServiceProvider],
})
export class AppModule {}
CATALOG
  1. 1. 基础使用
    1. 1.1. Value Provider
    2. 1.2. Non-class-based provider tokens
    3. 1.3. Class providers