상세 컨텐츠

본문 제목

[FE 45] _23.06.05 _ Day 38 ([Web Server] 기초)

프론트앤드 부트캠프/Day

by 코린’s 2023. 6. 5. 09:03

본문

728x90
반응형

 

- app.js

const express = require('express');
const cors = require('cors');
const app = express();

// 모든 서버는 요청을 받을수 있는 포트 번호를 필요로 합니다.

// HTTP server의 표준 포트는 보통 80 번 이지만, 보통 다른 서버에서 사용중이기 때문에 접근할 수 없습니다.
// 따라서 우리는 보통 테스트 서버 포트로 3000, 8080, 1337 등을 활용합니다.

// PORT는 아파트의 호수와도 같습니다. 서버로 요청을 받기 위해서는 다음과 같이 포트 번호를 설정 합니다.
// (* 때에 따라 다른 포트번호를 열고 싶다면, 환경 변수를 활용 하기도 합니다.)
const port = 3001;

const flightRouter = require('./router/flightRouter');
const bookRouter = require('./router/bookRouter');
const airportRouter = require('./router/airportRouter');

app.use(cors());
app.use(express.json());

app.use('/flight', flightRouter);
app.use('/book', bookRouter);
app.use('/airport', airportRouter);

app.get('/', (req, res) => {
  res.status(200).send('Welcome, States Airline!');
});

app.use((req, res, next) => {
  res.status(404).send('Not Found!');
});

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send({
    message: 'Internal Server Error',
    stacktrace: err.toString()
  });
});

app.listen(port, () => {
  console.log(`[RUN] StatesAirline Server... | http://localhost:${port}`);
});

module.exports = app;

- flightRouter.js

const { findAll, findById, update } = require('../controller/flightController');
const express = require('express');
const router = express.Router();

router.get('/', findAll);

router.get('/:uuid', findById);

router.put('/:uuid', update);

module.exports = router;

- flightController.js

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

module.exports = {
  // [GET] /flight
  // 요청 된 departure_times, arrival_times, destination, departure 값과 동일한 값을 가진 항공편 데이터를 조회합니다.
  // 요청 된 파라미터 departure, destination 값과 동일한 값을 가진 항공편 데이터를 조회합니다.
  findAll: (req, res) => {
    const { departure_times, arrival_times, destination, departure } =
      req.query;
  	// TODO:
    //return res.json(flights);
    
    if (Object.keys(req.query).length === 0) return res.json(flights);
    else if (departure_times !== undefined && arrival_times !== undefined) {
      const data = flights.filter(
        flight =>
          flight.departure_times === departure_times &&
          flight.arrival_times === arrival_times
      );
      return res.json(data);
    } else if (departure !== undefined && destination !== undefined) {
      const data = flights.filter(
        flight =>
          flight.departure === departure && flight.destination === destination
      );
      return res.json(data);
    } else {
      return res.json('Incorrect request');
    }
    
  },


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


  // [PUT] /flight/:uuid 요청을 수행합니다.
  // 요청 된 id 값과 동일한 uuid 값을 가진 항공편 데이터를 요쳥 된 Body 데이터로 수정합니다.
  update: (req, res) => {
    const { uuid } = req.params;
    const bodyData = req.body;
    //TODO:
    const beUpdatedIdx = flights.findIndex(flight => flight.uuid === uuid);
    const updatedFlight = { ...flights[beUpdatedIdx], ...bodyData }; //최종적으로 업데이트된 flight
    flights.splice(beUpdatedIdx, 1, updatedFlight);


    return res.status(200).json(updatedFlight);
  },
};
728x90
반응형

관련글 더보기