Menu
CoddyTech

작업 생성하기

Coddy Node.js 여정의 TypeScript와 NestJS 섹션에 포함된 레슨. 17개 중 4번째.

작업을 생성하는 클라이언트는 요청 본문에 JSON으로 작업을 보내고, 저장된 작업을 응답으로 받아야 합니다.

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

@Post()는 컨트롤러의 경로에 있는 POST를 메서드에 연결하고, @Body()는 파싱된 JSON을 메서드에 전달합니다. Nest는 JSON 본문을 자체적으로 읽으므로 추가할 express.json()은 없습니다.

Nest는 POST 요청에 새 리소스가 생성되었음을 나타내는 상태 코드인 201 Created로 응답하고, 다른 모든 메서드에는 200으로 응답합니다. 메서드에 @HttpCode(200)을 지정하면 응답 코드가 바뀌지만, 생성 요청에서는 그대로 두세요.

challenge icon

챌린지

쉬움
  • POST /tasks에 { "title": "Buy milk" }를 보내면 새 작업과 함께 201로 응답합니다. 새 숫자 id, title, done: false가 포함됩니다.
  • 이후 GET /tasks/:id로 해당 작업을 찾습니다.
  • 요청을 보낸 다음 POST /tasks에 {}를 보내고 무엇이 저장되는지 확인하세요.

직접 해보기

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와 NestJS의 모든 레슨