DTO
Termasuk bagian TypeScript dan NestJS dalam perjalanan Node.js di Coddy. Pelajaran 13 dari 24.
@Body() body: { title: string } menjelaskan body hanya di satu tempat, dan tidak ada yang memeriksanya: { "title": 42 } langsung diteruskan. DTO, singkatan dari objek transfer data, adalah class yang menjelaskan isi body permintaan.
export class CreateOrderDto {
customer: string;
express?: boolean;
}
@Post()
create(@Body() dto: CreateOrderDto) {
return this.ordersService.create(dto);
}express? menandai field opsional. Controller dan service menggunakan class yang sama, jadi keduanya sepakat tentang strukturnya.
DTO berupa class, bukan interface, karena ada alasannya. Interface dihapus bersama tipe lainnya saat kode dijalankan, sedangkan class tetap ada. Validasi Nest membaca aturan yang ditulis sebagai decorator, dan decorator memerlukan class. Itu akan dibahas di pelajaran berikutnya.
Tantangan
MudahClient kini dapat membuat task yang sudah selesai. Jelaskan body POST /tasks dengan DTO, sebuah class yang mencantumkan field yang dimiliki body permintaan, lalu teruskan semuanya hingga ke service.
- Di
src/tasks/dto/create-task.dto.ts, beri classCreateTaskDtodua field:title, sebuah string, dandone, boolean opsional. - Di
src/tasks/tasks.controller.ts, ubah methodcreate. Parameter@Body()-nya kini bertipeCreateTaskDto, bukan{ title: string }. Teruskan seluruh DTO ke service, bukan hanya title. - Di
src/tasks/tasks.service.ts, ubahcreateagar menerima DTO, bukan title. Task baru mendapatkantitledari DTO, dandonejuga dari DTO, ataufalsejika body tidak memilikidone. Id dancreatedAttetap bekerja seperti sebelumnya.
Coba: kirim POST { "title": "Pay rent", "done": true } ke /tasks. Kamu mendapatkan 201 dan task baru yang sudah selesai:
{ "id": 4, "title": "Pay rent", "done": true, "createdAt": "2026-10-30T09:15:00.000Z" }(createdAt menunjukkan waktu permintaanmu.) Kirim POST { "title": "Buy milk" }: 201 dengan "done": false. Lalu kirim POST { "title": 42 }. Kamu tetap mendapatkan 201, dengan "title": 42 tersimpan: DTO menjelaskan body, tetapi belum memeriksa apa pun. Pelajaran berikutnya membuat Nest menolaknya.
Coba sendiri
// Jelaskan body dari POST /tasks: sebuah judul, dan done saat client mengirimkannya.
export class CreateTaskDto {}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di TypeScript dan NestJS
Latihan sendiri: Playground Express