req.params란?
- 개요
req.params 객체는 URL 경로에서 파라미터로 전달된 값들을 저장하는 객체임.
- 데이터 구조
req.params 객체는 키-값 쌍 형태로 구성됨. 각 키는 URL 경로에서 정의된 파라미터 이름을 나타내고, 각 값은 해당 파라미터에 전달된 값을 나타냄. - 데이터 예시
만약 /post/123/comments/456 URL로 요청이 들어온다면, req.params 객체는 다음과 같은 데이터를 담고 있을 것임.
{
“postId”: “123”,
“commentId”: “456”
} - 데이터 타입
req.params 객체의 값들은 일반적으로 문자열 형태로 저장됨. 하지만, Express 앱 서정에 따른 타입으로 변환될 수 있음. - req.params 객체의 활용 예시
req.body vs req.params
- 정보 출처
- req.body : 요청 본문(request body)에서 파싱된 정보를 담고 있음
- req.params : 요청 URL에서 파싱된 정보를 담고 있음 - 파싱 방식
- req.body
- Content-Type 헤더에 따라 파싱 방식이 결정된다.
- 일반적으로 다음과 같은 방식으로 파싱됨
- application/json : JSON 객체로 파싱됨
- application/x-www-form-urlencoded : 키-값 쌍으로 파싱됨
- multipart/form-data : 파일 업로드 시 사용됨
- req.params
- URL 경로에 정의된 패턴에 따라 파싱됨 - 정보 종류
- req.body
- 사용자가 입력한 데이터 (예: 로그인 정보, 게시글 내용)
- 파일 업로드 시 파일 정보
- req.params
- URL 경로에 포함된 식별자 (예: 게시글 ID, 사용자 ID) - 정보 종류
- req.body
- 요청 본문에 포함된 데이터이기 때문에 변경 가능함
- req.params
- URL 경로에 포함된 정보이기 때문에 변경 불가능함 - 활용 예시
- req.body
- 사용자 로그인
- 게시글 작성
- 파일 업로드
- req.params
- 특정 게시글 조회
- 특정 사용자 정보 조회
- 댓글 작성
JSON 입력 vs url 입력
JSON으로 입력이 들어가는 경우 req.body로 코드를 작성하고 URL로 입력이 들어가는 경우 req.body로 작성하는 것은 일반적으로 맞다. 하지만, 예외적인 상황도 존재한다.
- req.body 사용 예외
GET 요청
- 일반적으로 GET 요청은 URL 쿼리 문자열을 통해 데이터를 전달함
- 하지만, 검색 기능 등의 경우 JSON 형태의 데이터를 req.body에 담아 전달할 수도 있음. - req.params 사용 예외
2.1 동적 URL 경로
- URL 경로에 변수를 포함하는 경우 (req.params) 외에 추가적인 정보를 URL 쿼리 문자열을 통해 전달할 수 있음.
2.2 쿼리 문자열 파라미터
- URL 경로에 포함하기 어려운 옵션이나 필터링 조건 등은 쿼리 문자열을 통해 전달하는 것이 좋음.
로컬 개발용 / DB 연결용 / 서버 배포용
세 가지 파트로 나눠서 개발을 진행하는 것이 좋지 않을까 싶다?
로컬 개발할 때에는 더미 데이터를 활용하고,
DB 연결할 때에는 더미 데이터를 사용했던 코드를 수정해서 DB에 연결하고,
서버 배포할 때에는 서버에 연결한다.
이런 순서로 개발 프로젝트 진행을 하면 되지 않을까 싶은데?
`router.use(authMiddleware); 코드 한 줄로 모든 명령에 authMiddleware를 적용할 수 있을까?`
1. router.use(authMiddleware); 코드의 작동 방식
router.use(authMiddleware); 코드는 모든 라우터에 미들웨어 함수를 적용합니다. 즉, 이 코드 아래에 위치한 모든 라우터는 요청 처리 전에 authMiddleware 함수를 거치게 됩니다.
2. 모든 명령에 authMiddleware 적용 가능 여부
router.use(authMiddleware); 코드 한 줄만으로 모든 명령에 authMiddleware를 적용할 수 있다.
- router.use 함수는 라우터에 대한 미들웨어 함수를 등록한다.
- router.get, router.post, router.put, router.delete 등 라우터 메서드는 라우터에 특정 HTTP 메서드에 대한 핸들러를 등록한다.
- router.use 함수로 등록된 미들웨어 함수는 라우터 메서드로 등록된 핸들러 실행 전에 항상 실행된다.
따라서, router.use(authMiddleware); 코드 위에 모든 라우터 메서드가 위치하기 때문에 모든 명령에 authMiddleware가 적용된다.
put과 patch의 차이
1. 개요
- put과 patch는 모두 http 메서드이며 리소스의 일부 또는 전체를 업데이트하는 데 사용된다.
- 하지만 두 메서드는 업데이트 방식과 의미에 있어 중요한 차이점이 있다.
2. PUT
- 전체 교체 : PUT은 요청 본문에 포함된 데이터로 리소스를 완전히 교체한다.
- 멱등성 : 동일한 요청을 반복해서 수행해도 리소스 상태는 동일하게 유지된다.
- 예시
3. PATCH
- 부분 수정 : PATCH는 요청 본문에 포함된 데이터로 리소스의 일부만 수정한다.
- 비멱등성 : 동일한 요청을 반복해서 수행하면 리소스 상태가 변경될 수 있음.
- 예시
4. 추가 고려 사항
- API 설계 시 PUT과 PATCH를 명확하게 구분하여 사용해야 한다.
- 리소스의 특성과 업데이트 요구 사항에 따라 적절한 메서드를 선택해야 한다.
- PUT은 전체 데이터를 교체하기 때문에 요청 본문에 모든 필드를 포함해야 한다.
- PATCH는 부분 수정만 수행하기 때문에 요청 본문에 수정할 부분만 포함하면 된다.
5. 결론
- PUT과 PATCH는 모드 리소스 업데이트에 사용되지만, 업데이트 방식과 의미에 있어 중요한 차이점이 있다.
- API 설계 및 사용 시 각 메서드의 특징을 명확히 이해하고 적절하게 사용해야 한다.
* 해당 게시글은 gemini를 참고하여 작성된 게시글임을 알립니다.
'Coding > 내일배움캠프' 카테고리의 다른 글
🍪 SameSite 옵션과 CSRF 공격 및 CORS 오류와의 관계 (0) | 2024.02.12 |
---|---|
[내일배움캠프] req 객체, 데이터베이스(고가용성, SQL, DQL) - Node.js 4기 TIL | Day 40 | 24.02.11.(일) (1) | 2024.02.11 |
[내일배움캠프] express의 req 객체와 res 객체에 관하여 - Node.js 4기 TIL | Day 38 | 24.02.09.(금) (0) | 2024.02.10 |
[내일배움캠프] Node.js 4기 TIL | Day 37 | 24.02.08.(목) (0) | 2024.02.08 |
[내일배움캠프] Node.js 4기 TIL | Day 36 | 24.02.07.(수) (1) | 2024.02.07 |