Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah
  • Buat TasksService dapat diinjeksi, tambahkan create(title) dan remove(id) untuk menangani pekerjaan yang dilakukan controller-mu pada pelajaran 5, lalu cantumkan di providers milik TasksModule.
  • Minta TasksService melalui constructor TasksController.
  • Kirim POST /tasks dengan { "title": "Buy milk" }, lalu GET /tasks, kemudian DELETE /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.
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di TypeScript dan NestJS

Latihan sendiri: Playground Express