Skip to content

C. NestJs Provider

1. Apa itu Provider?

  • Provider digunakan sebagai service, repository, factory, helper, dan lain-lain
  • NestJS akan meng-inject provider ke module yang menggunakan provider tersebut Depedency Injection sehingga provider dapat digunakan oleh seluruh module
  • Pada NestJS provider diberikan decorator @Injactable() pada class

app.service.tsx

latihan.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}
app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LatihanModule } from './latihan/latihan.module';

@Module({
  imports: [LatihanModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

2. Latihan membuat Provider

Pada latihan kali ini kita akan membuat provider yaitu service. Service adalah class yang digunakan untuk menaruh logic - logic yang di panggil oleh controller maupun service lain.

Alt text

Seperti contoh gambar di atas dimana service akan menghubungkan antara contoller dengan model dan database, sehingga pada service kita bisa membuat logic untuk menyimpan data , menghapus data, mengupdate data dan menampilkan data

untuk membuat service di nestjs kita bisa menggukakan nest cli seperti berikut

terminal
npx nest g service latihan

Jika berhasil maka kita akan mendapatkan pesan seperti di bawah

terminalå
ihsanabuhanifah@ihsanabuhanifah-MacBook-Pro backend-nestjs % npx nest g service latihan           
CREATE src/latihan/latihan.service.spec.ts (467 bytes)
CREATE src/latihan/latihan.service.ts (91 bytes)
UPDATE src/latihan/latihan.module.ts (262 bytes)
ihsanabuhanifah@ihsanabuhanifah-MacBook-Pro backend-nestjs %

Alt text

Dari pesan tersebut kita melihat nest cli sudah membuat file baru dengan nama latihan.service.ts

latihan.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class LatihanService {}

kemudian secara otomatis controller juga terimport otomatis pada file latihan.module.ts

latihan.module.ts
import { Module } from '@nestjs/common';
import { LatihanController } from './latihan.controller';
import { LatihanService } from './latihan.service';

@Module({
  controllers: [LatihanController],
  providers: [LatihanService],
})
export class LatihanModule {}

Selanjutkan kita akan latihan untuk membuat service yang akan di panggil di controller. Pertama kita akan buat service dengan nama getLatihan pada latihan.service.ts seperti berikut

latihan.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class LatihanService {
  getLatihan(): string {
    return 'latihan';
  }
}

Kemudian service tersebut kita akan panggil pada controller dengan mengguankan Dependency injection

constructor(private latihanService: LatihanService) {}

sehingga seperti code di bawah

latihan.controller.ts
import {
  Body,
  Controller,
  Delete,
  Get,
  Param,
  Post,
  Put,
  Query,
} from '@nestjs/common'; //import Get
import { LatihanService } from './latihan.service';

interface payloadDto {
  name: string;
  age: number;
}

interface QueryLatihanDto {
  name?: string;
  age_start?: number;
  age_end?: number;
}

@Controller('latihan') // base url
export class LatihanController {
  constructor(private latihanService: LatihanService) {}

  @Get('/list')
  getLatihan() {
    return this.latihanService.getLatihan(); // arti kode ini ketika routing di panggil maka function getLatihan pada controll akan memanggil service getLatihan 
  }

 ...
}

Kemudian kita tes di postman sebagai berikut

Alt text