728x90
//app.js부분
const flightRouter = require('./router/flightRouter');
저부분 따라서 flightRouter.js파일로 가면
//flightRouter.js부분
const { findAll, findById, update } = require('../controller/flightController');
저렇게 flightRouter와 flightController는 연결이 되고
flightController에 가면 findAll, findById, update가 있다
일단 이렇게 쭉 연결이 되고
//app.js
app.use('/flight', flightRouter);
app.use('/book', bookRouter);
app.use('/airport', airportRouter);
이부분을 통해서 쭉 연결이 되는거다.
이렇게 연결되기 위해서는 module이 쓰인다.
다른파일에서 써야되니까 모듈의 형태로 내보낸다는 의미이다.
flightController.js
const flights = require('../repository/flightList');
const fs = require('fs');
module.exports = {
findAll: (req, res) => {
const { departure_times, arrival_times, destination, departure } = req.query;
let filtered = [...flights];
for(key in req.query){filtered = filtered.filter((e) => e[key] === req.query[key]);}
return res.json(filtered);
},
findById: (req, res) => {
const { uuid } = req.params;
let filtered = flights.filter((el)=> req.params.uuid === el.uuid);
return res.json(filtered);
},
update: (req, res) => {
const { uuid } = req.params;
const bodyData = req.body;
const idx = flights.findIndex((el)=> el.uuid === uuid);
const newFlight = {
...flights[idx], ...bodyData,
};
flights.splice(idx, 1, newFlight); //splice(인덱스값, 몇개, 바꿀거)
return res.json(newFlight);
}
};
//의사코드포함
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;
//client가 정보를 입력하면 req.query에 담기게된다. 우리는 이 req.query의 값과 flights의 값을 비교하고 필터링한 값을 제공하면 된다.
let filtered = [...flights];
for(key in req.query){filtered = filtered.filter((e) => e[key] === req.query[key]);}
return res.json(filtered);
/* if(departure_times && arrival_times){
const filtered = flights.filter(
(el)=> el.departure_times === req.query.departure_times && el.arrival_times === req.query.arrival_times
);
return res.json(filtered);
}
if(destination && departure){
const filtered = flights.filter(
(el)=> el.destination === req.query.destination && el.departure === req.query.departure
);
return res.json(filtered);
}*/
//return res.json(flights);
},
// let filtered = [...flights];
//for(key in req.query){filtered = filtered.filter((e) => e[key] === req.query[key]);}
// return res.json(filtered);
/* if(arrival_times){
filtered = filtered.filter((item)=> item.arrival_times === req.query.arrival_times)
}
if(destination){
filtered = filtered.filter((item)=> item.destination === req.query.destination)
}
if(departure){
filtered = filtered.filter((item)=> item.departure === req.query.departure)
}
return res.json(filtered);*/
// [GET] /flight/:uuid
// 요청 된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터를 조회합니다.
findById: (req, res) => {
const { uuid } = req.params; //params는 uuid라는 프로퍼티를 불러올수있다.req.params.uuid
// TODO:
/* let list = fligths;
if(req.params){
list = list.filter((item)=>{
return req.params.uuid === item.uuid
})
}
return res.status(200).json(list);*/
let filtered = flights.filter((el)=> req.params.uuid === el.uuid);
return res.json(filtered);
},
// Advanced
// [PUT] /flight/:uuid 요청을 수행합니다.
// 요청 된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터를 요쳥 된 Body 데이터로 수정합니다.
update: (req, res) => {
const { uuid } = req.params;
const bodyData = req.body;
// TODO:
/*const a = flights.find(a => a.uuid === uuid)
for(let key in bodyData) a[key] = bodyData[key]
res.json(a) */
/*let data = flights.filter((e)=> e.uuid === req.params.uuid) //동일한 값을 가진 것을 추출하여 data에 저장
let list = Object.assign(data[0], req.body); //data[0]과 body를 합쳐 객체화시킨다.
return res.json(list); */
const idx = flights.findIndex((el)=> el.uuid === uuid);
const newFlight = {
...flights[idx], ...bodyData,
};
flights.splice(idx, 1, newFlight); //splice(인덱스값, 몇개, 바꿀거)
return res.json(newFlight);
}
};
bookController.js
const { v4: uuid } = require('uuid');
let booking = [];
module.exports = {
findAll: (req, res) => {
return res.status(200).json(booking);
},
findByPhone: (req, res) => {
const {phone} = req.params;
let filtered = booking.filter(e => e.phone === phone)
return res.json(filtered);
},
findByPhoneAndFlightId: (req,res) => {
const {phone, flight_uuid} = req.params;
let filtered = booking.filter(e => e.phone === phone && e.flight_uuid === flight_uuid)
return res.json(filtered);
create: (req, res) => {
const booking_uuid = uuid();
const data = {...req.body, booking_uuid};
booking.push(data);
return res.json(data);
},
deleteByBookingId: (req, res) => {
const {booking_uuid} = req.params;
const idx = booking.findIndex((el)=> el.booking_uuid === booking_uuid);
booking.splice(idx, 1);
}
};
//의사코드포함
// POST /book에서 사용할 uuid입니다.
const { v4: uuid } = require('uuid');
//uuid 네트워크상에 있는 객체들을 식별하기위해 고유한id를만들기위한 표준규약
//v4가 가장 많이 사용되는 uuid. v4는 랜덤생성
// 항공편 예약 데이터를 저장합니다.
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;
let filtered = booking.filter(e => e.phone === phone)
return res.json(filtered);
},
// [GET] /book/:phone/:flight_uuid 요청을 수행합니다.
// 요청 된 id, phone과 동일한 uuid, phone 예약 데이터를 조회합니다.
findByPhoneAndFlightId: (req,res) => {
const {phone, flight_uuid} = req.params;
let filtered = booking.filter(e => e.phone === phone && e.flight_uuid === flight_uuid)
return res.json(filtered);
/*let list = booking
if(req.query.flight_uuid){
list = booking.filter((item)=>{
return req.query.flight_uuid === item.flight_uuid;
})
return res.status(200).json(list)
}
if(req.query.phone){
list = booking.filter((item)=>{
return req.query.phone === item.phone;
})
return res.status(200).json(...list)
}
return res.status(200).json(list) */
},
// [POST] /book 요청을 수행합니다.
// 요청 된 예약 데이터를 저장합니다.
create: (req, res) => {
// POST /book에서 사용할 booking_uuid입니다.
const booking_uuid = uuid();
const data = {...req.body, booking_uuid}; //새로운데이터
booking.push(data);
return res.json(data);
/*let body = req.body;
body.booking_uuid = booking_uuid;
booking.push(body);
return res.status(201).json({msg: 'Created'});*/
},
// Optional
// [DELETE] /book/:booking_uuid 요청을 수행합니다.
// 요청 된 id, phone 값과 동일한 예약 데이터를 삭제합니다.
// TODO:
deleteByBookingId: (req, res) => {
const {booking_uuid} = req.params;
//let filtered = booking.filter((e)=> e.booking_uuid !== booking_uuid)
//return res.json(filtered)
const idx = booking.findIndex((el)=> el.booking_uuid === booking_uuid); //지울거를 찾는다
booking.splice(idx, 1); // 같은거 그거 idx를 지워라.
}
};
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'); // 그리고 이게 app.use에서 쓰인다. 이게 module부분이랑 연결되는거다
const bookRouter = require('./router/bookRouter');
const airportRouter = require('./router/airportRouter');
app.use(cors());
app.use(express.json());
app.use('/flight', flightRouter); //이게 require로 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!');
});
/*
-현재 미들웨어 함수가 응답을 종료하지 않는 경우 next를 호출하여 다음 미들웨어 함수에서 제어할수있도록 해야한다.
제어를 전달하지 않으면 해당 요청은 정지상태로방치된다. next없으면 다음코드 진행못한다.
-특정 엔드포인트가 아닌 app.use를 사용해서 모든 요청에 동일한 미들웨어를 적용한다.
*/
app.use((err, req, res, next) => {
console.error(err.stack); //에러가 발생한 위치를 알려주는게 error 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; //이게 app.use랑 연결되는거다
728x90
'과제기록' 카테고리의 다른 글
[페어] statesairline-client (0) | 2023.02.03 |
---|---|
[페어] beesbeesbees (0) | 2023.01.28 |
[project] 나만의 아고라스테이츠만들기 (0) | 2023.01.10 |