שירות
חלק מהיחידה 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.
אתגר
קל- הפוך את
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.
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.