[Node.js] States Airline Server

이정원·2022년 8월 5일
0

req.query
해당 라우트 경로에서 각각의 query string을 파라미터로 갖는 객체 프로퍼티이다.
query parser이 값이 없으면 빈 객체가 나오고 그렇지 않으면 해당 하는 값에 맞는 query parser가 나온다.

req.params
app/get/:id라는 라우터 경로가 있을 때, id는 req.params.id로 불러올수 있다 req의 객체에는 parameter라는 프로퍼티가 있고, 그 프로퍼티의 id라는 프로퍼티로 접근해 요청을 보낼 수 있다.

req.body
키 값의 데이터가 담긴 객체 프로퍼티이며, JSON 객체에 접근이 가능하다.

미리 작성되어있는 api요청을 수행하는 라우터 파일과,
미들웨어와 웹서버를 실행하는 코드를 이용하여 client에서 요청한 값을 서버로 전달하여 client가 원하는 서비스를 제공해주는 프로그램이다.

내가 작성해야 될 것은 flightController.js와 bookController.js 파일이었다.

flightController.js는 flight 경로에서 요청을 하면 해당 객체를 리턴해주는 형식으로 작성을 해야했다.
flightController.js

const flights = require('../repository/flightList');

module.exports = {
  // [GET] /flight
  // 요청 된 departure_times, arrival_times, destination, departure 값과 동일한 값을 가진 항공편 데이터를 조회합니다.
  findAll: (req, res) => {
    const {query} = req
    const {departure_times, arrival_times, destination, departure} = query
    if(query){
    if(departure_times && arrival_times){
    let filtered = flights.filter(function(el){
    return el.departure_times === departure_times && el.arrival_times === arrival_times
    })
    return res.json(filtered);
  }
    if(destination && departure){
    let filtered = flights.filter(function(el){
    return el.destination === destination && el.departure === departure
    })
    return res.json(filtered);
  }
}

    return res.json(flights);
  },
  // [GET] /flight/:id
  // 요청 된 id 값과 동일한 uuid 값을 가진 항공편 데이터를 조회합니다.
  findById: (req, res) => {
    if(req.params.id){
    let filtered = flights.filter(function(el){
    return el.uuid === req.params.id
    })
    return res.json(filtered);
  }

  },

  // [PUT] /flight/:id 요청을 수행합니다.
  // 요청 된 id 값과 동일한 uuid 값을 가진 항공편 데이터를 요쳥 된 Body 데이터로 수정합니다.
  update: (req, res) => {
    let data;
    if(req.params.id){
    data = flights.filter(function(el){
    return el.uuid === req.params.id
    })
 let filtered = Object.assign(data[0], req.body)
 return res.status(200).json(filtered)
 }
    

    return res.status(200).json(data);
  }
};

bookController.js는 book 경로에서 요청시 조건에 맞는 값을 반환해주는 것을 작성해야 했다

bookController.js

const flights = require('../repository/flightList');
// 항공편 예약 데이터를 저장합니다.
let booking = [];

module.exports = {
  // [GET] /book 요청을 수행합니다.
  // 전체 데이터 혹은 요청 된 flight_uuid, phone 값과 동일한 예약 데이터를 조회합니다.
  findById: (req, res) => {
   if(req.query.flight_uuid){
    let filtered = booking.filter(function(el){
      return el.flight_uuid === req.query.flight_uuid
    })
    return res.status(200).json(filtered)
   }
   if(req.query.phone){
    let filtered = booking.filter(function(el){
      return el.phone === req.query.phone
    })
    return res.status(200).json(filtered[0])
   }
    // TODO:

    return res.status(200).json(booking);
  },

  // [POST] /book 요청을 수행합니다.
  // 요청 된 예약 데이터를 저장합니다.
  // 응답으로는 book_id를 리턴합니다.
  // Location Header로 예약 아이디를 함께 보내준다면 RESTful한 응답에 더욱 적합합니다.
  // 참고 링크: https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#useful-post-responses
  create: (req, res) => {
   booking.push(req.body)
    // TODO:

    return res.status(201).json({});
  },

  // [DELETE] /book?phone={phone} 요청을 수행합니다.
  // 요청 된 phone 값과 동일한 예약 데이터를 삭제합니다.
  deleteById: (req, res) => {
    if(req.query.phone){
      let filtered = booking.filter(function(el){
        return el.phone !== req.query.phone
      })
      return res.status(200).json(filtered)
    }
    // TODO:
    return res.status(200).json(booking);
  }
};

나머지 파일은 편의상 올리지 않습니다.

profile
Study.log

0개의 댓글