Sebuah Layanan
Termasuk bagian TypeScript dan NestJS dalam perjalanan Node.js di Coddy. Pelajaran 6 dari 17.
Controller menyimpan tasks itu sendiri, jadi bagian lain dari aplikasi tidak bisa mengaksesnya. Data dan logika sebaiknya berada di dalam provider: class yang dibuat Nest dan diberikan kepada siapa pun yang memintanya.
@Injectable()
export class BooksService {
private books = [{ title: 'Dune' }];
}
@Controller('books')
export class BooksController {
constructor(private readonly booksService: BooksService) {}
}@Injectable() menandai class tersebut, dan module mencantumkannya di providers. Sebuah class memintanya dengan mencantumkan namanya di constructor: inilah injeksi dependensi. Nest membaca tipe parameter, yang disimpan oleh compiler untuk class yang diberi dekorator, membuat satu instance untuk seluruh aplikasi, lalu memberikan instance yang sama kepada setiap class yang memintanya. Data pun dibagikan, dan sebuah pengujian bisa memberikan pengganti palsu.
Pelajaran ini dimulai dengan controller yang sudah memanggil this.tasksService.
Tantangan
Mudah- Buat
TasksServicedapat diinjeksi, tambahkancreate(title)danremove(id)untuk menangani pekerjaan yang dilakukan controller-mu pada pelajaran 5, lalu cantumkan diprovidersmilikTasksModule. - Minta
TasksServicemelalui constructorTasksController. - Kirim
POST /tasksdengan{ "title": "Buy milk" }, laluGET /tasks, kemudianDELETE /tasks/99.
Coba sendiri
import { NotFoundException } from '@nestjs/common';
export interface Task {
id: number;
title: string;
done: boolean;
createdAt?: string;
}
// Jadikan class ini provider yang dapat di-inject oleh Nest.
export class TasksService {
private tasks: Task[] = [
{ id: 1, title: 'Write the README', done: true, createdAt: '2026-01-05T09:00:00.000Z' },
{ id: 2, title: 'Fix the login bug', done: false, createdAt: '2026-01-06T14:30:00.000Z' },
{ id: 3, title: 'Plan the sprint', done: false, createdAt: '2026-01-07T08:15:00.000Z' },
];
findAll(done?: string): Task[] {
if (done === undefined) {
return this.tasks;
}
return this.tasks.filter((task) => task.done === (done === 'true'));
}
findOne(id: number): Task {
const task = this.tasks.find((task) => task.id === id);
if (!task) {
throw new NotFoundException(`Task ${id} not found`);
}
return task;
}
// Pindahkan logika create dan remove dari controller ke sini.
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di TypeScript dan NestJS
Latihan sendiri: Playground Express