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.
Tantangan
Mudahclient perlu menambahkan tugas, bukan hanya membacanya. Tambahkan rute yang membuat tugas dari JSON yang dikirim client.
- Di
src/tasks/tasks.controller.ts, tambahkan method keTasksController(beri namacreate) untukPOST /tasks. Tandai dengan@Post(), lalu baca body JSON dengan@Body()pada parameternya. Keduanya berasal dari@nestjs/common. - Buat tugas baru dari
titledi body. Beri tugas ituidyang belum dimiliki tugas lain: satu lebih besar dari id terbesar dithis.tasks. Tugas baru belum selesai, jadidonebernilaifalse. - Tambahkan tugas ke
this.tasks, agarGET /tasksdanGET /tasks/:iddapat menemukannya nanti. Kembalikan tugas baru tersebut. - 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
1Dasar-Dasar Nest
class dan methodHalo, NestMendaftarkan Controller4Guard, Filter, dan Interceptor
GuardLatihan sendiri: Playground Express