Menu
CoddyTech

Bir Servis

Coddy'nin Node.js Journey'sinin TypeScript ve NestJS bölümünün bir parçası. Ders 6 / 17.

Denetleyici görevleri kendi içinde tutar, bu nedenle uygulamanın başka hiçbir bölümü onlara erişemez. Veriler ve mantık bir sağlayıcıya aittir: Nest'in oluşturduğu ve isteyen kişiye verdiği bir sınıf.

@Injectable()
export class BooksService {
    private books = [{ title: 'Dune' }];
}

@Controller('books')
export class BooksController {
    constructor(private readonly booksService: BooksService) {}
}

@Injectable() sınıfı işaretler ve modül onu providers listesine ekler. Bir sınıf, yapıcısında adını belirterek onu ister: buna bağımlılık enjeksiyonu denir. Nest, derleyicinin süslenmiş sınıflar için sakladığı parametrenin türünü okur, uygulamanın tamamı için tek bir örnek oluşturur ve bunu isteyen her sınıfa aynı örneği aktarır. Veriler paylaşılır ve testte bunun yerine sahtesi verilebilir.

Bu ders, denetleyicinin zaten this.tasksService öğesini çağırmasıyla başlar.

challenge icon

Görev

Kolay
  • TasksService'i enjekte edilebilir yap, ona create(title) ve remove(id) yöntemlerini ekle; bunlar, denetleyicinin 5. derste yaptığı işlerdir. Ardından TasksModule'ün providers listesine ekle.
  • TasksController'ın kurucusunda bu servisi iste.
  • { "title": "Buy milk" } ile POST /tasks isteği gönder, ardından GET /tasks ve sonra DELETE /tasks/99 isteklerini gönder.

Kendin dene

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

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

// Bu sınıfı Nest'in enjekte edebileceği bir provider hâline getirin.
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 ve remove mantığını controller'dan buraya taşıyın.
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

TypeScript ve NestJS bölümündeki tüm dersler