Menu
CoddyTech

Mendaftarkan Provider

Termasuk bagian TypeScript dan NestJS dalam perjalanan Node.js di Coddy. Pelajaran 10 dari 24.

Nest hanya membuat class yang dicantumkan module dalam providers. Sebuah provider dapat meminta provider lain, dan setiap provider harus didaftarkan.

@Injectable()
export class OrdersService {
    constructor(private readonly mailer: MailerService) {}
}

Jika MailerService tidak ada dalam providers milik module, aplikasi tidak akan dimulai, dan Nest menyebutkan dengan tepat apa yang tidak dapat ditemukan:

Nest can't resolve dependencies of the OrdersService (?).
Please make sure that the argument MailerService at index [0]
is available in the OrdersModule module.

? menandai argumen constructor yang hilang, dan pesan tersebut menyebutkan class serta module yang perlu diperbaiki.

challenge icon

Tantangan

Mudah
  • Kode awal menambahkan ClockService. Minta layanan itu di TasksService dan berikan setiap tugas baru createdAt: this.clock.now().
  • Daftarkan ClockService di TasksModule.
  • Kirim POST /tasks dengan judul. Lalu hapus ClockService dari providers, tekan Jalankan, baca error-nya, lalu masukkan kembali.

Coba sendiri

import { Injectable, NotFoundException } from '@nestjs/common';

export interface Task {
    id: number;
    title: string;
    done: boolean;
    createdAt?: string;
}

@Injectable()
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;
    }

    create(title: string): Task {
        const id = Math.max(0, ...this.tasks.map((task) => task.id)) + 1;
        const task = { id, title, done: false };
        this.tasks.push(task);
        return task;
    }

    remove(id: number): void {
        this.findOne(id);
        this.tasks = this.tasks.filter((task) => task.id !== id);
    }
}

Semua pelajaran di TypeScript dan NestJS

Latihan sendiri: Playground Express