שלום, Nest
חלק מהיחידה TypeScript ו-NestJS במסלול ה-Node.js של Coddy. שיעור 2 מתוך 24.
ב-Express כל נתיב הוא פונקציה שרושמים ידנית. NestJS מעניק לכל חלק בממשק API מחלקה משלו, ודקורטורים אומרים ל-Nest מה עושה כל מחלקה.
@Controller('books')
export class BooksController {
@Get()
findAll() {
return [{ title: 'Dune' }];
}
}בקר מטפל בבקשות עבור נתיב אחד. @Controller('books') ו-@Get() הם דקורטורים. דקורטור מתחיל ב-@ ומופיע בשורה שמעל מחלקה או מתודה, כדי לומר ל-Nest למה היא משמשת. הדקורטורים של Nest תמיד מסתיימים ב-(), גם כשלא מופיע בתוכם דבר. יחד הם ממפים את findAll אל GET /books, ו-Nest שולח את הערך שהמתודה מחזירה בתור JSON עם סטטוס 200. Nest לעולם לא שולח בקשה למתודה שאין לה דקורטור של נתיב.
מודול מציג את המחלקות ששייכות זו לזו. src/main.ts קורא ל-NestFactory.create(AppModule); AppModule מייבא את TasksModule, שמציג את TasksController. במחשב נייד היית מפעיל אותו באמצעות npm run start; כאן כפתור ההרצה עושה זאת.
בקוד ההתחלתי, interface Task מתאר את השדות של אובייקט משימה, ו-Task[] פירושו מערך של אובייקטים כאלה. private משאיר שדה בתוך המחלקה שלו. טיפוס שמופיע אחרי הסוגריים של מתודה מתאר את הערך שהיא מחזירה. ההצהרות האלה עוזרות ל-TypeScript לבדוק את הקוד שלך; הדקורטורים של Nest מגדירים את הנתיבים.
אתגר
קלשרת Nest הראשון שלך כבר מכיל שלוש משימות, אבל עדיין אין נתיב שמחזיר אותן. הוסף את הנתיב שמציג אותן.
- פתח את
src/tasks/tasks.controller.ts. המחלקהTasksControllerמחזיקה את הרשימה ב-this.tasks.@Controller('tasks')שמעל למחלקה מטיל עליה לטפל בנתיבים שמתחילים ב-/tasks. - במקום שבו מופיעה ההערה, הוסף מתודה (קרא לה
findAll) וסמן אותה ב-@Get(). היא מחזירה אתthis.tasks. Nest שולח את הערך שהמתודה מחזירה בתור JSON, עם קוד מצב 200. Getמגיע מ-@nestjs/common, כמוController. הוסף אותו לייבוא בשורה הראשונה.
נסה זאת: לחץ על "שחק", ואז שלח GET /tasks. תקבל 200 ואת שלוש המשימות:
[
{ "id": 1, "title": "Write the README", "done": true },
{ "id": 2, "title": "Fix the login bug", "done": false },
{ "id": 3, "title": "Plan the sprint", "done": false }
]לאחר מכן שלח GET /task, בלי ה-s. אין נתיב שתואם לנתיב הזה, ולכן Nest משיב עם 404:
{ "message": "Cannot GET /task", "error": "Not Found", "statusCode": 404 }נסו בעצמכם
import { Controller } from '@nestjs/common';
interface Task {
id: number;
title: string;
done: boolean;
}
@Controller('tasks')
export class TasksController {
private tasks: Task[] = [
{ id: 1, title: 'Write the README', done: true },
{ id: 2, title: 'Fix the login bug', done: false },
{ id: 3, title: 'Plan the sprint', done: false },
];
// הוסיפו כאן מתודה שמחזירה את הרשימה בתגובה לבקשת GET /tasks.
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה TypeScript ו-NestJS
1יסודות Nest
מחלקות ומתודותשלום, Nestרישום בקר4משמרים, מסננים ומיירטים
משמריםתרגלו בעצמכם: Express אונליין