Lesson 7 / 34
Providers & Services
Put business logic in @Injectable services, register them as providers and export them to other modules.
Anatomy of a service
A service is a class with @Injectable() that holds your business logic—fetching data, validating rules, etc.
import { Injectable } from '@nestjs/common';
@Injectable()
export class UsersService {
private users = [];
findAll() {
return this.users;
}
create(user) {
this.users.push(user);
return user;
}
}Providers in modules
Register services in the providers array of a module; also export them if other modules need them.
Custom providers with useValue
For constants or mocks use { provide: 'API_KEY', useValue: 'abc' } and inject it with @Inject('API_KEY'). Strings need @Inject because they have no runtime type.
Quick check
Quick check: What is the default scope of a Nest provider?
- A new instance per request
- A new instance per injection
- A single shared instance (singleton)
Answer
A single shared instance (singleton) — By default Nest creates one instance and reuses it. Request scope must be opted into.