Node.js Express (express는 프레임워크)

오늘도 삽질중·2021년 12월 7일
0

[Web Server]

목록 보기
1/2

👊 MERN

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
})

👊 자주 사용하는 미들웨어


미들웨어를 사용하는 상황은 다음과 같다.

  1. 모든 요청에 대해 url이나 메소드를 확인할때
  2. POST 요청 등에 포함된 body(payload)를 구조화 할때 (쉽게 얻어내고자 할 때)
  3. 모든요청/응답에 CORS 헤더를 붙여야 할 때
  4. 요청 헤더에 사용자 인증 정보가 담겨있는지 확인 할 때
  • 아래는 myLogger라는 이름의 미들웨어 함수에 대한 간단한 예가 표시되어있다.
    next()를 좀 더 자세히 보자. 뭘까?
var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
};

👣 next()

이 함수를 호출하면 앱 내의 그 다음 미들웨어 함수가 호출된다. next()함수는 Node.js또는 Express API의 일부가 아니지만, 미들웨어 함수에 전달되는 세 번째 인수이다. 미들웨어 함수 myLogger은 단순히 메세지를 인쇄한 후 next()함수를 호출하여 스택 내의 그 다음 미들웨어 함수에 요청을 전달한다.

🖐 미들웨어 함수를 로드하려면 app.use() 를 호출하면된다.

예를들어 루트경로(/)로 라우팅 하기 전에 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);
  • 미들웨어의 로드 순서는 중요하며, 먼저 로드되는 미들웨어 함수가 먼저 실행된다.

24열 위에 app.use(myLogger)하면 콘솔에 찍힘

24열 아래에 app.use하면 콘솔 안찍힘

app.get('/', (req, res) => {
  res.status(200).send('Welcome, States Airline!');
});

app.use((req, res, next) => {
  res.status(404).send('Not Found!');
});

이것도 순서 중요하다. 에러 미들웨어가 get요청보다 위에있으면 서버를 아무리 실행해도 'Not Found!'만 뜰것이다.

순서 중요하다!!!

cf) nodemon다운
  • npm install nodemon --save-dev

-dev는 development mode, 로컬에서만 사용
dev 명령어로 사용가능

참고자료
-코드스테이츠
-express공식문서
-https://velog.io/@chy0428/Node-JS-Nodemon-%EC%84%A4%EC%B9%98

profile
의미없는 삽질은 없다1

0개의 댓글