مرحبًا بـ 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؛ وهنا يتولى Run ذلك.
في المشروع الابتدائي، تصف 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الحراس والمرشحات والمعترضات
الحراستدرّب بنفسك: Playground لـ Express