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.
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.
src/tasks/tasks.controller.tsdosyasında,POST /tasksiçinTasksControllersınıfına bir yöntem ekle (adınıcreatekoy). Yöntemi@Post()ile işaretle ve parametresinde@Body()kullanarak JSON gövdesini oku. İkisi de@nestjs/commoniçinden gelir.- Yeni görevi gövdedeki
titledeğerinden oluştur. Başka hiçbir görevde olmayan biridver:this.tasksiçindeki en büyük id'den bir fazla. Yeni bir görev hiçbir zaman tamamlanmış olmaz, bu yüzdendonedeğerifalseolur. - Görevi
this.tasksiçine ekle; böyleceGET /tasksveGET /tasks/:iddaha sonra bu görevi bulabilir. Yeni görevi döndür. - 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
1Nest Temelleri
Sınıflar ve MetotlarMerhaba, NestBir Controller Kaydetme4Guard’lar, Filtreler, Interceptor’lar
Guard’larKendi başına pratik yap: Express playground