하나의 오류 형식
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');챌린지
쉬움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);
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.