Menu
CoddyTech

أنابيب التحليل

جزء من قسم TypeScript وNestJS في رحلة Node.js على Coddy. الدرس 13 من 17.

يرد GET /tasks/abc بالخطأ 404 "Task NaN not found"، لكن abc ليس معرّفًا أصلًا: هذا طلب غير صالح، 400. يمكن للـ Pipes التحويل والتحقق أيضًا.

@Get()
findAll(@Query('year', ParseIntPipe) year: number) {
    return this.reportsService.forYear(year);
}

عند تمريره كوسيط ثانٍ لمُزخرف معلمة، يحوّل ParseIntPipe النص إلى رقم قبل تنفيذ الطريقة. يمرر GET /reports?year=2026 الرقم 2026، لذا يصبح year: number صحيحًا أخيرًا؛ أما ?year=soon فيرد بالخطأ 400 "Validation failed (numeric string is expected)" ولا تُنفَّذ الطريقة مطلقًا. يعمل ParseBoolPipe وParseUUIDPipe بالطريقة نفسها.

challenge icon

التحدي

سهل
  • يُرجع GET /tasks/abc وDELETE /tasks/abc الرمز 400.
  • تعمل المعرّفات الرقمية كما في السابق؛ وما يزال المعرّف غير المعروف يُرجع الرمز 404.
  • أرسل GET /tasks/abc، ثم GET /tasks/1، ثم GET /tasks/9999.

جرّب بنفسك

import { Body, Controller, Delete, Get, HttpCode, Inject, Param, Post, Query } from '@nestjs/common';
import { CreateTaskDto } from './dto/create-task.dto';
import { Task, TasksService } from './tasks.service';

@Controller('tasks')
export class TasksController {
    constructor(
        private readonly tasksService: TasksService,
        @Inject('PAGE_SIZE') private readonly pageSize: number,
    ) {}

    @Get()
    findAll(@Query('done') done?: string, @Query('page') page = '1') {
        const tasks = this.tasksService.findAll(done);
        const current = Number(page);
        const start = (current - 1) * this.pageSize;
        return {
            items: tasks.slice(start, start + this.pageSize),
            page: current,
            total: tasks.length,
            pages: Math.ceil(tasks.length / this.pageSize),
        };
    }

    @Get(':id')
    findOne(@Param('id') id: string): Task {
        return this.tasksService.findOne(Number(id));
    }

    @Post()
    create(@Body() dto: CreateTaskDto): Task {
        return this.tasksService.create(dto);
    }

    @Delete(':id')
    @HttpCode(204)
    remove(@Param('id') id: string): void {
        this.tasksService.remove(Number(id));
    }
}

جميع دروس TypeScript وNestJS