[Mongoose REST API] PATCH와 body-parser, 그리고 HTML의 name과 value

2020. 5. 15. 17:15컴퓨터언어/Database

728x90
반응형

PATCH는 클라이언트가 업데이트 하고자 하는 필드만을 공략해주는 메서드다.

이때 클라이언트가 "글의 내용을 'Hello'로 업데이트해주세요"에 해당하는 것이 app.patch() 메서드 내의 {$set: {title: "Hello"}} 인자이다.

https://mongoosejs.com/docs/api/model.html#model_Model.update

 

Mongoose v5.9.14:

Parameters doc «Object» values for initial set optional «[fields]» object containing the fields that were selected in the query which returned this document. You do not need to set this parameter to ensure Mongoose handles your query projection. [skipI

mongoosejs.com

물론 위에서 예를 들기 위해 하드코딩한 "Hello"는 실전에서는 클라이언트가 실제로 HTML 폼에 입력한 값을 그때그때 유동적으로 받아와야 한다.

왜냐하면 저 상태라면 해당 레코드의 title 필드를 항상 "Hello"로만 바꾸기 때문이다.

이때 필요한 것이 body-parser이다.

 

HTML <form>에서 클라이언트의 입력 데이터가 서버로 전송되면, 해당 Route가 처리될 때 호출되는 콜백함수에서 이용되는 request(req) 인자가 그 입력 데이터를 가지고 있는다.

여기서 body-parser는 req 인자에 .body로 접근하여 입력 데이터를 가지고 놀 수 있게 되는 것이다.

 

그리고 req.body를 하게되면,

해당 결과는 HTML 내에 존재하는 모든 name="" 속성을 가지고 있는 <> 태그들의 value="" 값을 {} 객체에 담아 저장하게 된다.

이때 name이 {}의 key, 그리고 value가 {}의 value로 들어간다.

 

따라서 위에서의 {$set: {title: "Hello"}}는 {$set: req.body}로 수정해야 한다.

PATCH의 매력이 바로 여기서 드러난다!

req.body에는 HTML 내의 여러 name-value(key-value) 쌍들이 들어있는데, PATCH는 그중에서 클라이언트가 수정하고자 입력한 부분만 인식하여 그 부분만 싹 바꿔준다.


5월 8일을 5월 15일로 바꿔보는 예제▼

1. GET으로 현재 상태 조회
2. PATCH로 title값을 바꾸기
3. 성공 메시지
4. 수정된 화면

 

728x90
반응형