이번과제는 Express 프레임워크를 이용해 만들고, 로컬 호스트와 연결해 클라이언트의 요청에 따라 항공편과 예약 데이터를 조회, 생성, 수정, 그리고 삭제하는 기능을 만든다.
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);
}
}}
// 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);
??미들웨어가 저런건가..?뭔말인지 대충은 알겠는데..아직 헷갈리는 느낌이 든다.
항상 이렇다. 프로그래머스나 과제는 큰어려움없이 잘 진행되는데, 개념문제만 보면 헷갈린다. 내일 쉬는날에 한번 쫙 정리해야지...