Menu
CoddyTech

שירות

חלק מהיחידה TypeScript ו-NestJS במסלול ה-Node.js של Coddy. שיעור 6 מתוך 17.

הבקר מחזיק את המשימות עצמן, ולכן אף חלק אחר באפליקציה לא יכול לגשת אליהן. הנתונים והלוגיקה שייכים לספק: מחלקה ש-Nest יוצרת ומעבירה למי שמבקש אותה.

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

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

@Injectable() מסמן את המחלקה, והמודול מציין אותה בתוך providers. מחלקה מבקשת אותו באמצעות ציון שמו בבנאי שלה: זהו הזרקת תלויות. Nest קוראת את טיפוס הפרמטר, שהמהדר שומר עבור מחלקות עם דקורטורים, יוצרת מופע אחד עבור האפליקציה כולה ומעבירה את אותו מופע לכל מחלקה שמבקשת אותו. הנתונים משותפים, ובבדיקה אפשר להעביר במקומו תחליף מזויף.

השיעור הזה נפתח כשהבקר כבר קורא ל-this.tasksService.

challenge icon

אתגר

קל
  • הפוך את TasksService לניתן להזרקה, הוסף לו את create(title) ואת remove(id), את העבודה שהבקר שלך ביצע בשיעור 5, והוסף אותו ל־providers של TasksModule.
  • בקש אותו בבנאי של TasksController.
  • שלח POST /tasks עם { "title": "Buy milk" }, לאחר מכן GET /tasks, ואז DELETE /tasks/99.

נסו בעצמכם

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

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

// הפוך את המחלקה הזו ל-provider ש-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;
    }

    // העבר לכאן את הלוגיקה של יצירה והסרה מה-controller.
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה TypeScript ו-NestJS