Menu
CoddyTech

Membuat Tugas

Termasuk bagian TypeScript dan NestJS dalam perjalanan Node.js di Coddy. Pelajaran 6 dari 24.

client yang membuat tugas mengirimkannya sebagai JSON di body permintaan, lalu membutuhkan tugas yang sudah disimpan sebagai balasan.

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

@Post() memetakan POST pada jalur controller ke method, dan @Body() memberikan JSON yang sudah diurai kepadanya. Nest membaca body JSON secara otomatis, jadi kamu tidak perlu menambahkan express.json().

Nest membalas POST dengan 201 Created, status yang menunjukkan bahwa resource baru sudah tersedia, dan membalas semua method lainnya dengan 200. @HttpCode(200) pada method akan mengubahnya. Untuk pembuatan, biarkan saja.

challenge icon

Tantangan

Mudah

client perlu menambahkan tugas, bukan hanya membacanya. Tambahkan rute yang membuat tugas dari JSON yang dikirim client.

  1. Di src/tasks/tasks.controller.ts, tambahkan method ke TasksController (beri nama create) untuk POST /tasks. Tandai dengan @Post(), lalu baca body JSON dengan @Body() pada parameternya. Keduanya berasal dari @nestjs/common.
  2. Buat tugas baru dari title di body. Beri tugas itu id yang belum dimiliki tugas lain: satu lebih besar dari id terbesar di this.tasks. Tugas baru belum selesai, jadi done bernilai false.
  3. Tambahkan tugas ke this.tasks, agar GET /tasks dan GET /tasks/:id dapat menemukannya nanti. Kembalikan tugas baru tersebut.
  4. Jangan atur status sendiri. Nest merespons POST dengan 201 Created secara otomatis.

Coba: pilih POST, path /tasks, dan body { "title": "Buy milk" }. Kamu mendapat 201 dan:

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

Kirim GET /tasks/4: tugas yang sama. Lalu kirim POST dengan body kosong, {}. Body belum diperiksa, jadi kamu tetap mendapat 201, dengan tugas yang tidak memiliki title: { "id": 5, "done": false }. Bab Validation memperbaikinya.

Coba sendiri

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));
    }
}

Semua pelajaran di TypeScript dan NestJS

Latihan sendiri: Playground Express