과제 - StatesAirline Server

이성민·2023년 6월 5일
0

이번과제는 Express 프레임워크를 이용해 만들고, 로컬 호스트와 연결해 클라이언트의 요청에 따라 항공편과 예약 데이터를 조회, 생성, 수정, 그리고 삭제하는 기능을 만든다.

flightController.js

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

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

  // Advanced
  // [PUT] /flight/:uuid 요청을 수행합니다.
  // 요청 된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터를 요쳥 된 Body 데이터로 수정합니다.
  update: (req, res) => {
    const { uuid } = req.params;
    const bodyData = req.body;
     // TODO:
     let r = null;  //업데이트된 항공편 선언
      flights.forEach((i, j) => { //foreach로 순회
      if (i.uuid === uuid){
         flights[j] = { ...i, ...bodyData }; //인덱스에 기존 항공편 속성과 요청된데이터로 넣음
         r = flights[j]; //업데이트된 객체 할당
      }
    });
      if (r) {
      return res.json(r);
     } else { //아니면 에러
      return res.status(404);
    }
  }}

bookController.js

// POST /book에서 사용할 uuid입니다.
const { v4: uuid } = require('uuid');
// 항공편 예약 데이터를 저장합니다.
let booking = [];

module.exports = {
  // [GET] /book 요청을 수행합니다.
  // 전체 예약 데이터를 조회합니다.
  findAll: (req, res) => {
    return res.status(200).json(booking);
  },
  // [GET] /book/:phone 요청을 수행합니다.
  // 요청 된 phone과 동일한 phone 예약 데이터를 조회합니다.
  findByPhone: (req, res) => {
    const {phone} = req.params;
    const r = booking.filter(book => book.phone === phone); //todo??
    return res.json(r);
  },
  // [GET] /book/:phone/:flight_uuid 요청을 수행합니다.
  // 요청 된 id, phone과 동일한 uuid, phone 예약 데이터를 조회합니다.
  findByPhoneAndFlightId: (req,res) => {
    const {phone, flight_uuid} = req.params;
    // TODO:
    const r = booking.filter(i => i.phone === phone && i.flight_uuid === flight_uuid); //:flight_uuid 요청
    return res.json(r);
  },
  // [POST] /book 요청을 수행합니다.
  // 요청 된 예약 데이터를 저장합니다.
  create: (req, res) => {
    // POST /book에서 사용할 booking_uuid입니다.
    const booking_uuid = uuid();
    // TODO:
    const r = {booking_uuid, ...req.body}; //예약 객체 생성 후 예약데이터랑, 요청 바디 속성 복사함
    booking.push(r);
    return res.json(r);
  },
  // Optional
  // [DELETE] /book/:booking_uuid 요청을 수행합니다.
  // 요청 된 id, phone 값과 동일한 예약 데이터를 삭제합니다.
  deleteByBookingId: (req, res) => {
    const {booking_uuid} = req.params;
    // TODO:
    const r = booking.filter((booking) => booking.phone === phone);
    return res.json(r);
}
};

어려운부분은 없었다. 또 종합퀴즈가 틀려서 문제다 ㅠㅠ

다음 Express 서버 코드에 대한 설명 중 옳지 않은 것을 고르세요.

const express = require('express')
const app = express()
const port = 3000

const logger1 = (req, res, next) => {
  console.log("logger1");
  next();
}

const logger2 = (req, res, next) => {
  console.log("logger2");
  next();
}

const codestates = (req, res) => {
  res.send('Hello CodeStates!');
}

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.use(logger1, logger2);

app.get('/codestates', codestates);

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

A.
GET /요청을 서버에 보내면 'Hello World!'가 응답으로 온다.


B.
GET /codestates요청을 서버에 보내면 'Hello CodeStates!'가 응답으로 온다.


C.
GET /요청을 서버에 보내면 "logger1", "logger2"가 콘솔에 출력된다.


D.
GET /codestates요청을 서버에 보내면 "logger1", "logger2"가 콘솔에 출력된다.


E.
logger1, logger2는 미들웨어(middleware)다.

해설
app.use(logger1, logger2) 코드가 app.get('/', //생략) 보다 밑에 있기 때문에 미들웨어 적용이 되어있지 않습니다.
따라서 GET /요청을 서버에 보내면 "logger1", "logger2"가 콘솔에 출력되지 않습니다.
반면에, app.get('/codestates', codestates) 코드는 app.use(logger1, logger2)보다 아래에 있기 때문에 미들웨어 적용이 됩니다.
따라서 GET /codestates요청을 서버에 보내면 "logger1", "logger2"가 콘솔에 출력됩니다.


app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.use(logger1, logger2);

app.get('/codestates', codestates);

??미들웨어가 저런건가..?뭔말인지 대충은 알겠는데..아직 헷갈리는 느낌이 든다.
항상 이렇다. 프로그래머스나 과제는 큰어려움없이 잘 진행되는데, 개념문제만 보면 헷갈린다. 내일 쉬는날에 한번 쫙 정리해야지...

profile
도전자

0개의 댓글

관련 채용 정보