🧐
코딩하며 하도 모니터를 봤더니 눈이 시리다
블루라이트 차단 안경 그런거를 사야하나
집에 있는 의자는 불편해서 한 시간만 앉아 있어도 허리가 부서질것 같음
의자는 조만간 갖다 버린다 두고보자
🖼
미들웨어는 자동차 공장의 공정과 비슷하다. 컨베이어 벨트 위에 올라가 있는 request에 필요한 기능을 더하거나, 문제가 발견된 불량품을 밖으로 걷어내는 역할을 한다.
📝 메모장) 처음에 코드를 봤는데 이해가 안되서 간단히 메모를 적으며 이해해봤다
var express = require('express');
var app = express();
var router = express.Router();
//app.use, app.get 등 app뒤에 use(모든 method를 받을 때 미들웨어를 실행한다)과 get, post, put, delete각 method를 받을 때 미들웨어를 실행한다
/*
<express의 내장 미들웨어를 알아보자>
express.json()
express.raw()
express.Router()
express.static()
express.text()
express.urlencoded()
*/
//<express를 기본적으로 어떻게 적어주는지 알아보자>
app.use('/user/:id', function(req, res, next) { //미들웨어는 클라이언트가 /user/:id 경로에 관한 요청을 보내면 뒤의 함수로 실행된다
console.log('Time', Date.now())
next() //next인자는 다음 미들웨어를 실행할 수 있게한다
})
//<에러 핸들링에 대해 알아보자>
app.use(function(err, req, res, next) { //에러 핸들링은 항상 4개의 인자를 넣어줘야 한다 3개 넣으면 그냥 일반 미들웨어로 인식한다
console.log(err.stack)
res.status(500).send('Something broke!')
})
//<third party 미들웨어에 대해 알아보자(걍 누군가가 직접 만드는 미들웨어임)>
function thirdParty(req, res, next) {
const youtuber = "woorimIt";
console.log(`${youtube} 구독과 좋아요 눌러주세요.`);
req.youtube = youtuber;
next();
}
app.use("/", thirdParty); //"/"의 경로로 들어오면 thirdParty미들웨어가 작동한다
app.post("/login", (req, res) => {
console.log(req.youtube);
})
express 프레임 워크를 어떻게 적는지 알고나니 월요일 http모듈로 직접 url분기를 처리해주고 request, respons를 처리해줄 때보다 훨씬 쉬운 방법이라는 것을 깨닫는다
이 과제는 크게 3가지 종류의 파일로 나뉜다
- app.js로써 express프레임워크가 적혀있으며 여기서 client로 들어온 request를 1차적으로 어떻게 처리할지 큰 틀을 잡아놓는다
- 두번째로는 각 url로 나눠진 router들이 있다 여기서는 client가 보낸 http method와 url에 따라 구체적으로 어떤 모듈을 써서 요청을 처리할지 정해놓는다
- controller로써 실제로 요청을 처리하는 함수들이 적혀있는 모듈이다
const express = require('express');
const cors = require('cors');
const app = express();
const port = 3001;
const flightRouter = require('./router/flightRouter');
const bookRouter = require('./router/bookRouter');
const airportRouter = require('./router/airportRouter');
app.use(cors()); //서버로 들어오는 모든 요청에 cors 응답을 부여합니다
app.use(express.json()); //서버로 들어오는 모든 데이터에 json()을 적용해서 data를 출력했을 때 우리가 이해할 수 있는 객체로 표현시켜줍니다
//<아래와 같은 조건으로 요청이 들어오면 router로 처리한다>
app.use('/flight', flightRouter); //flight 분기로 들어오면 flightRouter를 실행합니다 (use를 섰으니까 모든 http mehod에 대해)
app.use('/book', bookRouter); //book 분기로 들어오면 bookRouter를 실행합니다 (use를 섰으니까 모든 http mehod에 대해)
app.use('/airport', airportRouter); //airport 분기로 들어오면 airportRouter를 실행합니다 (use를 섰으니까 모든 http mehod에 대해)
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) => { //이것은 error핸들러다 인자가 4개이기 때문임 (express에서 인자가 4개인 것은 에러 헨들러임)
console.error(err.stack);
res.status(500).send({
message: 'Internal Server Error',
stacktrace: err.toString()
});
});
if (process.env.NODE_ENV !== "test") {
app.listen(port, () => {
console.log(`[RUN] StatesAirline Server... | http://localhost:${port}`);
});
}
const { findById, create, deleteById } = require('../controller/bookController');
const express = require('express');
const router = express.Router();
router.get('/', findById); //get method로 요청이 들어오면 findById를 실행한다
router.post('/', create); //post method로 요청이 들어오면 create를 실행한다
router.delete('/', deleteById); //delete method로 요청이 들어오면 deleteById를 실행한다
module.exports = router;
const flights = require('../repository/flightList');
// 여기에 항공편 예약 데이터를 저장합니다.
let booking = [];
module.exports = {
// [GET] /book 요청을 수행합니다. (router에 적혀있음)
// 전체 데이터 혹은 요청 된 flight_uuid, phone 값과 동일한 예약 데이터를 조회합니다. (요청으로 들어오는 flight_uuid, phone의 type이나 구체적인 값들은 서버를 만들 때 제공하는 API를 봐야 알 수 있음)
findById: (req, res) => {
let list = booking;
if(req.query.flight_uuid) {
list = list.filter((item)=> {
item.flight_uuid === req.query.flight_uuid
})
return res.status(200).json(list);
}
else if(req.query.phone) {
list = list.filter((item)=> {
return req.query.phone === item.phone;
})
return res.status(200).json(...list);
}
return res.status(200).json(booking);
},
// [POST] /book 요청을 수행합니다. (router에 적혀있음)
// 요청 된 예약 데이터를 저장합니다.
// 응답으로는 book_id를 리턴합니다.
create: (req, res) => {
if("flight_uuid" in req.body && "name" in req.body && "phone" in req.body) {
booking.push(req.body);
}
else {
return res.status(400).json({message : 'Error'})
}
return res.status(201).json({message: 'Create'});
},
// [DELETE] /book?phone={phone} 요청을 수행합니다. (router에 적혀있음)
// 요청 된 phone 값과 동일한 예약 데이터를 삭제합니다.
deleteById: (req, res) => {
let deleteId;
booking.forEach((el, id)=> {
if(el.phone === req.query.phone) {
deleteId = id;
}
})
booking.splice(deleteId,1)
return res.status(200).json(booking);
}
};
보면 알겠지만 client가 본인의 id나 phone을 통해 예약을 확인할 수 있고 예약할 수 있으며 삭제도 할 수 있도록 만들어 놨다
화요일날 볼 땐 무슨 말인지 몰랐는데
또 보니 이해가 다르다