Menu
CoddyTech

Görevler Oluşturma

Coddy'nin Node.js Journey'sinin TypeScript ve NestJS bölümünün bir parçası. Ders 6 / 24.

Bir görev oluşturan istemci, görevi istek gövdesinde JSON olarak gönderir ve kaydedilen görevin geri gönderilmesine ihtiyaç duyar.

@Post()
create(@Body() review: { stars: number }) {
    this.reviews.push(review);
    return review;
}

@Post(), denetleyicinin yolundaki POST isteğini yönteme eşler ve @Body() ayrıştırılmış JSON'u yönteme aktarır. Nest, JSON gövdelerini kendisi okur; bu nedenle eklemeniz gereken bir express.json() yoktur.

Nest, POST isteğine yeni bir kaynağın var olduğunu belirten durum kodu olan 201 Created ile yanıt verir; diğer tüm yöntemlere ise 200 ile yanıt verir. Yöntemdeki @HttpCode(200) bunu değiştirir; yeni bir kaynak oluştururken olduğu gibi bırakın.

challenge icon

Görev

Kolay

İstemcilerin görevleri yalnızca okumaları değil, görev eklemeleri de gerekir. İstemcinin gönderdiği JSON'dan bir görev oluşturan rota ekle.

  1. src/tasks/tasks.controller.ts dosyasında, POST /tasks için TasksController sınıfına bir yöntem ekle (adını create koy). Yöntemi @Post() ile işaretle ve parametresinde @Body() kullanarak JSON gövdesini oku. İkisi de @nestjs/common içinden gelir.
  2. Yeni görevi gövdedeki title değerinden oluştur. Başka hiçbir görevde olmayan bir id ver: this.tasks içindeki en büyük id'den bir fazla. Yeni bir görev hiçbir zaman tamamlanmış olmaz, bu yüzden done değeri false olur.
  3. Görevi this.tasks içine ekle; böylece GET /tasks ve GET /tasks/:id daha sonra bu görevi bulabilir. Yeni görevi döndür.
  4. Durum kodunu kendin ayarlama. Nest, POST isteğine kendi başına 201 Created yanıtını verir.

Deneyin: POST'u seç, yol olarak /tasks ve gövde olarak { "title": "Buy milk" } kullan. 201 yanıtı ve şunu alırsın:

{ "id": 4, "title": "Buy milk", "done": false }

GET /tasks/4 gönder: aynı görev döner. Ardından boş bir gövde olan {} ile POST gönder. Gövde henüz kontrol edilmediğinden, yine 201 yanıtı alırsın; ancak görevde başlık bulunmaz: { "id": 5, "done": false }. Doğrulama bölümü bunu düzeltir.

Kendin dene

import { Controller, Get, Param, Query } 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()
    findAll(@Query('done') done?: string): Task[] {
        if (done === undefined) {
            return this.tasks;
        }
        return this.tasks.filter((task) => task.done === (done === 'true'));
    }

    @Get(':id')
    findOne(@Param('id') id: string): Task | undefined {
        return this.tasks.find((task) => task.id === Number(id));
    }
}

TypeScript ve NestJS bölümündeki tüm dersler

Kendi başına pratik yap: Express playground