오늘은 HA날이다.
- 어렵다 = 익숙하지 않다
좌절하지말고 멘탈잡고 나아가자 시험을 본 후 섹션2 express 다시 한 번 복습했다. 낼 시험에도 나올 부분이기도 하고.. 저번에 하다 말아서 다 까먹었다.
복습도 진화 하는건지 처음에 express 수업들을 때는 뭐가 뭔지도 몰랐다가 얼마전에 복습할때는 유투브나 블로그 같은거 보면서 이해를 도왔고 오늘은 공식문서를 읽고있다. ㅎㅎ 그치만 공식문서는 늘 어렵다.
공식문서가 익숙하고 트러블 슈팅을 잘하고 일 욕심있고 의사소통 잘되고 개발이 재밌고 신체 건강한 개발자가 되고싶다^^
MERN stack은 MongoDB, Express, React, Node를 지칭한다.(JavaScript 생태계에서 인기있는 프레임워크4대장)
이 중에서 Express.js는 **Node.js환경에서 웹 서버, 또는 API서버를 제작하기 위해 사용되는 인기있는 프레임워크이다. ** Express framework는 npm을 통해 다운받을 수 있다. Express로 구현한 서버가 http 모듈로 작성한 서버와 다른 점
1. 미들웨어 추가가 편리하다.
2. 자체 라우터를 제공한다. (npm install express-router)
- 라우팅: 메소드와 URL(/lower, /upper 등)로 분기점을 만드는 것. 클라이언트는 특정한 HTTP요청 메소드(GET, POST등)나 서버의 특정URI(또는 경로)로 HTTP 요청을 보낸다. 라우팅은 클라이언트의 요청에 해당하는 메소드와 Endpoint에 따라 서버가 응답하는 방법을 결정하는것이다.
// 순수 node.js코드로 라우팅 구현
const requestHandler = (req, res) => {
if(req.url === '/lower') {
if (req.method === 'GET') {
res.end(data)
} else if (req.method === 'POST') {
req.on('data', (req, res) => {
// do something ...
})
}
}
}
//Express는 프레임워크 자체에서 라우터 기능을 제공한다.
const router = express.Router()
router.get('/lower', (req, res) =>{
res.send(data)
})
router.post('/lower', (req, res) =>{
// do something
})
미들웨어를 사용하는 상황은 다음과 같다.
- 모든 요청에 대해 url이나 메소드를 확인할때
- POST 요청 등에 포함된 body(payload)를 구조화 할때 (쉽게 얻어내고자 할 때)
- 모든요청/응답에 CORS 헤더를 붙여야 할 때
- 요청 헤더에 사용자 인증 정보가 담겨있는지 확인 할 때
- 아래는 myLogger라는 이름의 미들웨어 함수에 대한 간단한 예가 표시되어있다. next()를 좀 더 자세히 보자. 뭘까?
var myLogger = function (req, res, next) {
console.log('LOGGED');
next();
};
이 함수를 호출하면 앱 내의 그 다음 미들웨어 함수가 호출된다. next()함수는 Node.js또는 Express API의 일부가 아니지만, 미들웨어 함수에 전달되는 세 번째 인수이다. 미들웨어 함수 myLogger은 단순히 메세지를 인쇄한 후 next()함수를 호출하여 스택 내의 그 다음 미들웨어 함수에 요청을 전달한다.
예를들어 루트경로(/)로 라우팅 하기 전에 myLogger 미들웨어 함수를 로드한다.
var express = require('express');
var app = express();
var myLogger = function (req, res, next) {
console.log('LOGGED');
next();
};
app.use(myLogger);
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.listen(3000);
- 미들웨어의 로드 순서는 중요하며, 먼저 로드되는 미들웨어 함수가 먼저 실행된다.
- npm install nodemon --save-dev
-dev는 development mode, 로컬에서만 사용 dev 명령어로 사용가능
- 노란색 형광펜: 값을 false로 설정하여 쿼리 파싱을 못하게 하거나 또는 쿼리파서를 설정한다.("simple" 또는 "extended" 또는 사용자 지정 쿼리 문자열 파싱 함수를 사용하기위해)
참고자료 -코드스테이츠 -express공식문서 -https://velog.io/@chy0428/Node-JS-Nodemon-%EC%84%A4%EC%B9%98