스프린트/im-sprint-statesairline-server

im-sprint-statesairline-server

테오구 2021. 11. 3. 18:27
728x90

Bare minimum requirements

"States Airline Server" 스프린트를 통해 Express 프로젝트에서 사용 되는 폴더 구조를 이해하고, Express를 활용하여 API 요청을 처리하는 방법을 실습하게 됩니다. 코드를 작성하면서 폴더 구조가 어떻게 구성이 되어 있고 router ,controller가 어떠한 역할을 수행하는지 관찰해 보세요.

스프린트 목표

  • Express 프레임워크를 사용하여 States Airline API Server를 개발합니다.
  • Flight API 와 Book API 에서 정의한 API 요청을 수행하는 코드를 작성하세요.
  • flight Router, Book Router 에 있는 모든 테스트를 통과해야 합니다.

 

bookRouter.js

기본 라우팅

라우팅은 URI(또는 경로) 및 특정한 HTTP 요청 메소드(GET, POST 등)인 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것을 말합니다.

더보기

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

애플리케이션의 홈 페이지인 루트 라우트(/)에서 POST 요청에 응답:

더보기

app.post('/', function (req, res) { res.send('Got a POST request'); });

/user 라우트에 대한 PUT 요청에 응답:

더보기

app.put('/user', function (req, res) { res.send('Got a PUT request at /user'); });

/user 라우트에 대한 DELETE 요청에 응답:

더보기

app.delete('/user', function (req, res) { res.send('Got a DELETE request at /user'); });

 

더보기

const { findById, create, deleteById } = require('../controller/bookController');

const express = require('express');

const router = express.Router();

 

router.get('/', findById);

 

router.post('/', create);

 

router.delete('/', deleteById);

 

module.exports = router;

 

bookController.js

req.query

이 속성은 경로에 있는 각 쿼리 문자열 매개 변수에 대한 속성을 포함하는 개체입니다. 쿼리 분석기를 사용하지 않도록 설정하면 빈 개체 {}이(가) 되지 않으면 구성된 쿼리 분석기의 결과입니다.

 

더보기

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

// 항공편 예약 데이터를 저장합니다.

let booking = []

 

module.exports = {

// [GET] /book 요청을 수행합니다.

// 전체 데이터 혹은 요청 된 flight_uuid, phone 값과 동일한 예약 데이터를 조회합니다.

findById: async (req, res) => {

//TODO:

// {

// flight_uuid: 'af6fa55c-da65-47dd-af23-578fdba44bed',

// name: '김코딩',

// phone: '010-1234-5678'

// }

let reqQue = req.query,

keys = Object.keys(reqQue)

let result = booking.filter(bookItem =>

keys.every(k => reqQue[k] === bookItem[k])

)

 

if (!!reqQue.phone) {

return res.status(200).json(result[0])

}

return res.status(200).json(result)

},

 

// [POST] /book 요청을 수행합니다.

// 요청 된 예약 데이터를 저장합니다.

create: async (req, res) => {

//TODO:

booking.push(req.body)

return res.status(201).json({ message: 'Create success!' })

},

 

// [DELETE] /book?phone={phone} 요청을 수행합니다.

// 요청 된 phone 값과 동일한 예약 데이터를 삭제합니다.

deleteById: async (req, res) => {

//TODO:

let reqQue = req.query

let result = []

for (let i = 0; i < booking.length; i++) {

if (booking[i].phone === reqQue.phone) {

result = booking.slice(0, i).concat(booking.slice(i + 1))

}

}

 

return res.status(200).json(result)

},

}

 

 

 

flightRouter.js

 

더보기

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

const express = require('express');

const router = express.Router();

 

router.get('/', findAll);

 

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

 

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

 

module.exports = router;

 

 

flightController.js

 

더보기

const app = require('../app')

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

 

module.exports = {

// [GET] /flight

// 요청 된 departure_times, arrival_times, destination, departure 값과 동일한 값을 가진 항공편 데이터를 조회합니다.

findAll: async (req, res) => {

// TODO:

let reqQue = req.query

console.log(reqQue)

let keys = Object.keys(reqQue),

result = flights.filter(item => keys.every(k => reqQue[k] === item[k]))

return res.json(result)

},

// [GET] /flight/:id

// 요청 된 id 값과 동일한 uuid 값을 가진 항공편 데이터를 조회합니다.

findById: async (req, res) => {

// TODO:

const reqPar = req.params

let result = flights.filter(item => {

if (reqPar.length === 0) {

return true

} else {

return item.uuid === reqPar.id

}

})

 

return res.json(result)

},

 

// [PUT] /flight/:id 요청을 수행합니다.

// 요청 된 id 값과 동일한 uuid 값을 가진 항공편 데이터를 요쳥 된 Body 데이터로 수정합니다.

update: async (req, res) => {

let data = {}

let tempFlights = flights.slice()

//TODO:

 

let reqBody = req.body // 바꿔야 하는 정보

let reqPar = req.params // 요청 id값

 

for (let i = 0; i < tempFlights.length; i++) {

if (flights[i].uuid === reqPar.id) {

for (let prop in tempFlights[i]) {

data[prop] = tempFlights[i][prop]

}

for (let prop in reqBody) {

data[prop] = reqBody[prop]

tempFlights[i][prop] = reqBody[prop]

}

}

}

// console.log(data)

 

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

},

}

 

airportRouter.js

 

더보기

const { findAll } = require('../controller/airportController');

const express = require('express');

const router = express.Router();

 

router.get('/', findAll);

 

module.exports = router;

 

 

airportController.js

 

더보기

const airports = require('../repository/airportList')

 

module.exports = {

// [GET] /airport?query={query} 요청을 수행합니다.

// 공항 이름 자동완성 기능을 수행합니다!

findAll: (req, res) => {

if (req.query.query !== undefined) {

console.log(req.query.query)

const list = airports.filter(item => {

return item.code.includes(req.query.query.toUpperCase())

})

return res.status(200).json(list)

}

res.json(airports)

},

}

 

728x90