@Injectable() is needed when your service has dependencies. Here's the difference:
Works WITHOUT @Injectable() (simple service, no dependencies):
export class UserService {
getUser() {
return [{ account: 'dung', password: '12345678' }];
}
}
BREAKS WITHOUT @Injectable() (service with dependencies):
// ❌ This will crash
export class UserService {
constructor(
private readonly databaseService: DatabaseService, // dependency
) {}
getUser() {
return this.databaseService.findUsers();
}
}
**Error you'll get:
**
Error: UserService is not a valid NestJS provider.
Please ensure that this class is decorated with @Injectable()
Works WITH @Injectable():
// ✅ This works
@Injectable()
export class UserService {
constructor(
private readonly databaseService: DatabaseService,
) {}
getUser() {
return this.databaseService.findUsers();
}
}
Best practice: Always use @Injectable() even if your service has no dependencies now, because you might add them later.