POST로 생성하기
Coddy Node.js 여정의 REST API 섹션에 포함된 레슨. 25개 중 2번째.
작업을 추가하는 클라이언트는 새 작업이 어디에 있는지 알아야 합니다. 새 리소스를 목록의 URL로 POST로 보내면, 서버는 리소스와 해당 URL을 나타내는 Location 헤더를 포함해 201 생성됨으로 응답합니다.
POST /api/events { "name": "Launch party" }
201 Created
Location: /api/events/12
{ "id": 12, "name": "Launch party" }id는 서버가 정하므로 두 클라이언트가 같은 id를 사용할 수 없습니다. Location 헤더를 사용하면 클라이언트가 직접 URL을 만들지 않고도 새 이벤트를 가져올 수 있습니다. res.location(path)은 해당 헤더를 설정하며, res.status처럼 연결해서 사용할 수 있습니다.
res.status(201).location(`/api/events/${event.id}`).json(event);챌린지
쉬움클라이언트가 작업을 추가할 수 있는 방법이 필요합니다. 작업을 생성하고 새 작업의 위치를 클라이언트에 알려 주는 POST 경로를 추가하세요.
routes/tasks.js에서POST /api/tasks경로를 추가하세요(라우터 내부에서 해당 경로는'/'입니다). JSON 본문에서title을 읽습니다. 예:{ "title": "Order new chairs" }.- 다음 네 필드로 새 작업을 만드세요.
id:store.js의nextId()함수에서 가져옵니다.tasks와 함께 가져오세요.title: 본문에서 가져옵니다.done:false.createdAt:new Date().toISOString(), 현재 시각을 텍스트로 나타낸 값입니다.
tasks배열에 추가하여GET /api/tasks에서도 표시되도록 하세요. - 상태 코드 201과 새 작업을 JSON으로 응답하세요.
Location헤더를 해당 작업의 URL로 설정하세요. 작업 4의 경우/api/tasks/4입니다. 새로 실행했을 때 응답 본문은 다음과 같습니다(createdAt은 전송하는 시각입니다).{ "id": 4, "title": "Order new chairs", "done": false, "createdAt": "2026-10-30T09:12:44.512Z" } - 본문에
title이 없으면 상태 코드 400과{ "error": "title is required" }를 응답하고, 목록에는 아무것도 추가하지 마세요.
직접 해 보세요: POST를 선택하고, 경로에 /api/tasks, 본문에 { "title": "Order new chairs" }를 입력하세요. 상태 코드 201과 위에 나온 id가 4인 작업이 표시되고, 응답의 Headers 탭에는 Location: /api/tasks/4가 표시됩니다. GET /api/tasks/4를 전송하면 같은 작업이 반환됩니다. 그런 다음 {}를 /api/tasks에 POST로 전송하세요. 오류와 함께 상태 코드 400이 반환되고, 거부된 POST는 아무것도 추가하지 않았으므로 GET /api/tasks에는 여전히 작업 4개가 표시됩니다.
직접 해보기
import { Router } from 'express';
import { tasks } from '../store.js';
const router = Router();
router.get('/', (req, res) => {
res.json(tasks);
});
router.get('/:id', (req, res) => {
const task = tasks.find((t) => t.id === Number(req.params.id));
if (!task) {
return res.status(404).json({ error: 'Task not found' });
}
res.json(task);
});
export default router;
REST API의 모든 레슨
직접 연습해 보세요: Express 플레이그라운드