Menu
CoddyTech

하나의 오류 형식

Coddy Node.js 여정의 REST API 섹션에 포함된 레슨. 18개 중 8번째.

이제 API는 오류를 두 가지 형태로 응답합니다. 404에는 문자열을, 400에는 zod의 객체를 사용합니다. 클라이언트는 각각을 처리해야 합니다. 모든 오류에 하나의 형태를 사용하세요.

{ "error": { "code": "not_found", "message": "Invoice not found" } }

{ "error": { "code": "invalid_body", "message": "Too small: ...",
             "fields": { "amount": ["Too small: expected number to be >0"] } } }

code는 프로그램을 위한 것입니다. 절대 바뀌지 않으므로 클라이언트가 값을 비교할 수 있습니다. message는 사람을 위한 것이며, 문구가 바뀔 수 있습니다. fields는 양식에서 어떤 입력 항목을 표시해야 하는지 알려줍니다. 하나의 함수에 이 형태를 작성하고 모든 경로에서 호출하여 경로마다 형태가 달라지지 않도록 하세요.

sendError(res, 404, 'not_found', 'Invoice not found');
challenge icon

챌린지

쉬움
  • errors.js에 sendError를 작성하세요. 상태 코드와 함께 { "error": { "code", "message" } }를 반환하고, fields는 제공된 경우에만 포함하세요.
  • 모든 404 응답에는 이를 사용하고(코드는 not_found), 잘못된 본문에는 모두 sendInvalid를 사용하세요. server.js의 오류 처리기에서는 sendError를 사용하세요(invalid_json, server_error).

DELETE /api/tasks/99를 보낸 다음, { "title": 123 }로 POST 요청을 보내세요.

직접 해보기

import { z } from 'zod';

// 모든 오류를 하나의 형식으로 보냅니다:
// { "error": { "code": "not_found", "message": "Task not found" } }
// "fields"는 주어진 경우에만 추가합니다.
export const sendError = (res, status, code, message, fields) => {
    // 여기에서 응답을 보냅니다
};

// zod 오류를 400으로 보냅니다: 첫 번째 문제는 메시지로, 각 필드의
// 문제는 fields에 넣습니다.
export const sendInvalid = (res, zodError) =>
    sendError(res, 400, 'invalid_body', zodError.issues[0].message, z.flattenError(zodError).fieldErrors);
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

REST API의 모든 레슨