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.
Görev
KolayTasksService'i enjekte edilebilir yap, onacreate(title)veremove(id)yöntemlerini ekle; bunlar, denetleyicinin 5. derste yaptığı işlerdir. ArdındanTasksModule'ünproviderslistesine ekle.TasksController'ın kurucusunda bu servisi iste.{ "title": "Buy milk" }ilePOST /tasksisteği gönder, ardındanGET /tasksve sonraDELETE /tasks/99isteklerini 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.
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.