TIL 37일차

안광의·2021년 8월 8일
1

Today I Learned

목록 보기
37/64
post-thumbnail
post-custom-banner

시작하며

오늘은 이번주에 배운 네트워크관련 내용과 Express.js를 바탕으로 클라이언트의 요청에 따라 항공 정보와 예약 정보를 조회, 추가, 수정하는 서버를 구축하는 스프린트를 진행하였다. 메소드와 URI에 따라서 실행되는 모듈을 직접 작성해보면서 API와 Response에 대해 더 깊게 이해할 수 있었다.

Express

flightController

const flights = require('../repository/flightList');
module.exports = {
  // [GET] /flight
  // 요청 된 departure_times, arrival_times, destination, departure 값과 동일한 값을 가진 항공편 데이터를 조회합니다.
  findAll: async (req, res) => {
    let filteredFlights = flights.slice();
    if (req.query.departure_times) {
      filteredFlights = filteredFlights.filter((item) => {
        return item['departure_times'].includes(req.query.departure_times)
      })
    } 
    if (req.query.arrival_times) {
      filteredFlights = filteredFlights.filter((item) => {
        return item['arrival_times'].includes(req.query.arrival_times)
      })
    } 
    if (req.query.destination) {
      filteredFlights = filteredFlights.filter((item) => {
        return item['destination'].includes(req.query.destination)
      })
    } 
    if (req.query.departure) {
      filteredFlights = filteredFlights.filter((item) => {
        return item['departure'].includes(req.query.departure)
      })
    }  
    return res.json(filteredFlights);
  },
  // [GET] /flight/{:id}
  // 요청 된 id 값과 동일한 uuid 값을 가진 항공편 데이터를 조회합니다.
  findById: async (req, res) => {
    return res.json(flights.filter((item) => {
      return item['uuid'].includes(req.params.id)
    }))
  },
  // [PUT] /flight/{:id} 요청을 수행합니다.
  // 요청 된 id 값과 동일한 uuid 값을 가진 항공편 데이터를 요청 된 Body 데이터로 수정합니다.
  update: async (req, res) => {
    let searchIdx;
    flights.forEach((el, id) => {
      if(el.uuid === req.params.id) {
        searchIdx = id;
      }
    })
    flights[searchIdx] = { ...flights[searchIdx], ...req.body}
    return res.status(200).json(flights[searchIdx]);
  }
};

bookController

const { indexOf } = require('../repository/flightList');
const flights = require('../repository/flightList');
// 항공편 예약 데이터를 저장합니다.
let booking = [];
module.exports = {
  // [GET] /book 요청을 수행합니다.
  // 전체 데이터 혹은 요청 된 flight_uuid, phone 값과 동일한 예약 데이터를 조회합니다.
  findById: async (req, res) => {
    if (req.query.flight_uuid) {
      const list = booking.filter((item) => {
        return item["flight_uuid"].includes(req.query.flight_uuid);
      });
      return res.status(200).json(list);
    }
    if (req.query.phone) {
      const list = booking.filter((item) => {
        return item["phone"].includes(req.query.phone);
      });
      return res.status(200).json(...list);
    }
    return res.status(200).json(booking);
  },
  // [POST] /book 요청을 수행합니다.
  // 요청 된 예약 데이터를 저장합니다.
  create: async (req, res) => {
    if("flight_uuid" in req.body && "name" in req.body && "phone" in req.body) {
      booking.push(req.body)
    }
    else { return res.status(400).json({ message: '누락된 예약정보가 있습니다.' })}
    return res.status(201).json({ message: 'Create success!' });
  },
  // [DELETE] /book?phone={phone} 요청을 수행합니다.
  // 요청 된 phone 값과 동일한 예약 데이터를 삭제합니다.
  deleteById: async (req, res) => {
    let deleteId;
    booking.forEach((el, id) => {
      if(el.phone === req.query.phone) {
        deleteId = id;
      }
    })
    booking.splice(deleteId,1)
    return res.status(200).json(booking);
  }
};

마치며

항상 사용해왔던 javaScript로 모듈을 구현하는 스프린트기 때문에 어렵지 않게 진행할 수 있었고, Express에서 사용하는 req, res의 메소드들도 새롭게 알 수 있어서 도움이 되었다. 기존에 Node만으로 작성할 때보다 프레임워크를 사용하는 것이 코드를 간결하게 작성할 수 있느 방법이라는 것을 알 수 있었기 때문에 다른 프레임워크들에 대해서도 추가적으로 학습해볼 예정이다.

profile
개발자로 성장하기
post-custom-banner

0개의 댓글