이전에 확인한 routes.json 파일을 열어서 method가 "PUT"인 객체를 보면 다음과 같은 정보가 있습니다.
{ "method": "PUT", "path": "/articles/:id", "handler": "article.update", "config": { "policies" [] } },
여기서 path 부분에 /articles/:id와 같이 :id를 사용했는데, 이를 URL 파라미터라고 부릅니다. URL에 /articles/1과 같은 형식으로 파라미터 값 1을 주소에 포함시켜서 요청하는 것입니다. 이렇게 설정된 URL 파라미터는 핸들러 함수에서 ctx.params.id 값을 통해 조회할 수 있습니다.
이 코드에서는 해당 id 파라미터를 조회하여 포스트가 존재하는지 확인합니다. 이때 findOne API를 사용했는데, 이 함수의 인자에 찾고 싶은 데이터의 필드 값을 넣어주면 됩니다. findOne({ id: })는 받아온 파라미터 id 값을 데이터의 id로 가지고 있는 데이터를 찾겠다는 의미입니다.
만약 데이터가 존재하지 않으면 Not Found 오류를 의미하는 404 오류를 응답합니다. 404 오류를 응답하게 하려면 ctx.throw(404)를 설정하면 됩니다.
그다음에는 사용자가 입력한 body에 user 값이 있는지 확인합니다. 만약 사용자가 임의의 user 값을 설정하면 본인이 아닌 다른 사용자의 id로 게시물을 업데이트할 수 있습니다. 따라서 해당 값이 존재하면 Bad Request 오류를 의미하는 400 오류를 응답합니다.
그 후 해당 포스트가 자신의 포스트인지 확인하고 그렇지 않다면 ctx.unauthorized 함수를 통해 Unauthorized를 의미하는 401 오류를 반환합니다.
HTTP에서는 이렇게 오류의 종류에 따라 다른 상태 코드를 사용합니다. HTTP 상태 코드에 익숙하지 않다면 다음 링크를 확인해보세요.
• https://developer.mozilla.org/ko/docs/Web/HTTP/Status
이와 같이 데이터 검증이 끝나면 update API를 사용하여 데이터를 업데이트합니다.