오늘은 리액트를 사용하여 만들어보았던
sprint 중에 StatesAirline - Client를
express를 사용하여 Server를 만들어보았다.
server에 s자도 몰랐던 나로써는 너무나도 버거웠다...
오늘 과제의 구현은
express 프레임워크를 이용하여 서버를 만들고,
클라이언트 요청에 따라 항공편과 예약 데이터를 조회,
생성, 수정, 삭제하는 기능을 수행할 수 있다.
먼저, app.js를 보면
express 프레임워크를 통해 서버를 구현하고
app.use를 통해 각각 flightRouter, bookRouter, airportRouter에
분기점을 만들어주었다.
router폴더에서 flightRouter.js를 살펴보면
controller폴더의 flightController의
파일들에서 작성된 함수를 가져와서 실행.
우리는 위에서 말한 작성된 함수를 작성하는게 과제였다.
루트를 살펴보면 controller.js 함수 -> router.js -> app.js 로 불려져서
사용되기 때문에 flightController.js와 bookController.js에 코드를
작성해서 항공편과 예약 데이터를 조회, 생성, 수정 그리고 삭제기능을 구현
먼저, flightController를 구현해보자
먼저 전체코드를 보도록하자
1. flightController.js
여기서는 [GET] /flight, [GET] /flight/{:uuid} 를 구현하면된다.
따라서 기능구현에 필요한 findAll, findById 함수를 만들어주면된다.
findAll부터 살펴보면,
클라이언트가 즉, 사용자가 /flight?departure_times={departure_times}를 입력하면
해당하는 departure_times의 데이터를 모두 보여주어야한다.
또한, /flight?departure_times={departure_times}&arrival_times={arrival_times}
이렇게 입력하면, 입력된 정보에 해당하는 것만 보여줘야함.
그럼 해당 데이터만 보여주기 위해서는 클라이언트가 입력한 정보와,
우리가 가지고 있는 데이터와 비교를 해야한다.
클라이언트가 입력한 정보는 req.query 객체에 담기고,
그럼 이 req.query 객체에 있는 데이터와 flightList에 있는 데이터와 비교
그럼 클라이언트가 입력한 정보가 req.query 객체에 어떻게 담길까!??
클라이언트가 /flight?departure=ICN&destination=CJU 를 입력하면
req.query={departure : "ICN", destination : "CJU"}가 된다.
그래서 이것을 활용하여 flightList에 있는 데이터를 필터링하면,
클라이언트가 원하는 정보만 볼 수 있게 됨.
클라이언트가 출발시간과 도착시간 값을 입력할때
그 값들과 동일한 값을 가진 항공편 데이터 조회
그럼 클라이언트가 원하는 정보인
출발시간과 도착시간이 입력이 되었을때,
가지고있던 데이터정보들(flights)을 filter()메서드를 통해
클라이언트가 입력한 정보인 출발시간과, 도착시간을 각각
가지고있던 데이터정보들 중에 출발시간과 도착시간과 각각 서로
비교해서 같은것들만 반환해주어 filterd 변수에 넣어준다.
그리고 filterd의 값들을 json화해서 응답으로 반환.
클라이언트가 출발지와 도착지 값을 입력할때
그 값들과 동일한 값을 가진 항공편 데이터를 조회
클라이언트가 원하는 정보인
출발지와 도착지가 입력되었을 때도
위의 출발시간과 도착시간을 입력했을때와 비슷하다.
출발시간, 도착시간을 출발지와 도착지로 바꿔주면된다.
클라이언트가 요청한 uuid값과 동일한 uuid값을
가진 항공편 데이터 조회
사실상 이거도 위의 예제와 다를바가 없다.
똑같이 요청한 uuid값과 동일한 uuid를 가진 데이터를
필터링해주어 전달해주면 되기때문이다.
다른점이 있다면, req.query을 조회했던 것을
여기서는 req.params를 조회하면 된다.
2. bookController.js
bookController는 테스트케이스가
배열안의 객체를 요구하기 때문에 스프레드 연산자를 사용.
bookController도 flightController와 비슷하게
구현하기 때문에 flightController를 이해했다면 이해하기 쉬울 것이다.
먼저, POST부터 구현해보자.
POST는 비교적 간단하였다.
항공편 예약 데이터를 저장할 booking 빈배열에 담아주기만 하면되었다.
스프레드문법을 이용하여 배열에 계속 추가해주었다.
클라이언트가 요청한 phone과 동일한
phone 예약 데이터를 조회할 때
flightController와 똑같이
클라이언트가 요청한 phone값 과 데이터의 phone값이
일치하는것을 필터링하여 응답으로 보내준다.
클라이언트가 요청한 uuid, phone과 각각
데이터에서 동일한 uuid, phone의 예약데이터를 조회할 때
클라이언트로부터 요청받은
phone, flight_uuid 값들이 각각
일치하는 것을 가지고있는 데이터에서 필터링하여
응답으로 보내준다.
내일은 어드밴스드를 꼭 풀어봐야겠다.
내일 아고라스테이츠 만들기... 파이팅!!