Express에서 특정 id를 URL 매개변수로 받는 방법

김지욱·2020년 8월 29일
1

코드스테이츠 HA test에서 특정 id를 받았을 때 특정 영화 데이터만 내려주는 api를 제작해야 하는 문제가 있었다. 구글 검색으로 나온 방법으로  문제는 쉽게 해결했지만 그 코드들의 의미를 알 수 없었다. 그래서 의미를 찾아보고 이해한 내용에 대해 정리를 해봤다. 

생활코딩Express 문서를 참고했다.

URL의 방식

Non-semantic URL  http://example.com/index.php?page=name
Semantic URL  http://example.com/name

URL에 Semantic한 방법과 Non-semantic 한 방식이 있다. 문제에서는 path 방식의 Semantic URL을 사용했다.

Express에서 path방식의 URL에서 매개변수를 얻는 방법

// Express 공식 문서의 예시
app.get('/user/:id', function (request, response) {
  response.send('user ' + request.params.id)
}) 

request 객체는 HTTP 요청을 나타내고 쿼리 문자열, 매개 변수, HTTP 헤더등에 대한 속성을 가지고있다.

위의 예시에서 '/user/:id' 부분에서 id가 매개 변수이고 그 매개 변수의 값을 얻는 방법이 request.parmas이다.

작성한 코드

app.get("/movies/:id", (request, response) => {
  const movie = movies.find(movie => movie.id === Number(request.params.id));
  if (!movie) {                                  
    return res.status(404).send("영화 정보를 찾을 수 없습니다");
  }
  res.status(200).send(movie);
})

완성한 코드이다. 여기서 movies는 영화 정보를 담고 있는 json 파일이다. 

movies.find(movie => movie.id)로 movies배열의 각 id에 접근하고, request.params.id와 일치하는지 확인한다.

reaquest.params.id를 문자열로 인식해서 Number 메서드를 사용했다.


+ 추가로 알게 된 내용

Array.prototype.find() : 조건이 만족하는 첫 번째 요소의 값을 반환한다.

const students = [
		{name: 'kim'},
		{name: 'park'},
		{name: 'lee'}	
	]

const findName = students.find(function(student) {
		return student.name === 'park'
	})

console.log(findName) // {name: "park"}

0개의 댓글