Express

Purple·2021년 10월 25일
0

TIL

목록 보기
39/73

1. Express

  • MERN stack은 JavaScript 생태계에서 인기있는 프레임워크인 MongoDB, Express, React, Node를 지칭한다.

  • 이 중 Express.js는 Node.js환경에서 웹 서버, 또는 API 서버를 제작하기 위해 사용되는 인기있는 프레임워크다.

  • Express로 구현한 서버가 http 모듈로 작성한 서버와 다른 점은 2가지가 있다.

    • Middleware(미들웨어) 추가가 편리하다.
    • 자체 라우터를 제공한다.
  • 메소드와 URL( /lower, /upper 등)로 분기점을 만드는 것을 라우팅(routing)이라고 한다.

  • 클라이언트는 특정한 HTTP 요청 메소드(GET, POST 등)나 서버의 특정 URI (또는 경로)로 HTTP 요청을 보낸다. 라우팅은 클라이언트의 요청에 해당하는 메소드와 Endpoint에 따라 서버가 응답하는 방법을 결정하는 것이다.

  • Express는 프레임워크 자체에서 라우터 기능을 제공한다. 그래서 순수한 node.js코드로 작성한 코드보다 Express의 라우터를 활용하면 더 직관적인 코드를 작성할 수 있다.

2. Middleware (미들웨어)

  • 미들웨어를 이용하면 node.js만으로 구현한 서버에서 번거로울 수 있는 작업을 보다 쉽게 적용할 수 있다. 미들웨어는 말 그대로 프로세스 중간에 관여하여 특정 역할을 수행한다.
  • 미들웨어를 사용하는 상황은 주로 4가지가 있다.
    • Case 1. 모든 요청에 대해 url이나 메소드를 확인할 때
    • Case 2. POST 요청 등에 포함된 body(payload)를 구조화 할 때(쉽게 얻어내고자 할 때)
    • Case 3. 모든 요청/응답에 CORS 헤더를 붙여야 할 때
    • Case 4. 요청 헤더에 사용자 인증 정보가 담겨있는지 확인할 때

case 1. 모든 요청에 대해 url이나 메소드를 확인할 때

	const express = require('express');
	const app = express();

	const myLogger = function (req, res, next) {
	  console.log('LOGGED'); // 이 부분을 req, res 객체를 이용해 고치면, 모든 요청(req 입력시), 응답(res 입력시)에 대한 로그를 찍을 수 있다.
	  next();			 
	 };

	app.use(myLogger);//모든 요청에 동일한 미들웨어(여기 예시에서는 'LOGGED'를 콘솔에 찍어내는 logger를 의미)를 적용할 때 app.use를 사용하면 된다.

	app.get('/', function (req, res) {
	  res.send('Hello World!');
	});

	app.listen(3000);

case 2 : POST 요청 등에 포함된 body(payload)를 구조화 할 때

  • body-parser 미들웨어를 사용하면 간단하게 처리할 수 있다.
	const bodyParser = require('body-parser')
	const jsonParser = bodyParser.json()
	// 생략
	app.post('/api/users', jsonParser, function (req, res) {
	  // req.body에는 JSON의 형태로 payload가 담겨져 있다.
	})

case 3 : 모든 요청/응답에 CORS 헤더를 붙일 때

  • 순수 node.js 코드에 CORS 헤더를 붙이려면, 응답 객체의 writeHead메소드 등을 이용한다. 그러나, cors 미들웨어를 사용하면 간단하게 처리할 수 있다.

  • 모든 요청에 대해 CORS허용 시,

	const cors = require('cors')
	// 생략
	app.use(cors()) // 모든 요청에 대해 CORS 허용
  • 특정 요청에 대해 CORS허용 시,
	const cors = require('cors')
	// 생략
	// 특정 요청에 대해 CORS 허용
	app.get('/products/:id', cors(), function (req, res, next) {
  		res.json({msg: 'This is CORS-enabled for a Single Route'})
	})

case 4 : 요청에 사용자 인증 정보가 담겨있는지 확인할 때

  • HTTP 요청에서 토큰이 있는 지 여부를 판단하여, 이미 로그인한 사용자일 경우 성공, 아닐 경우 에러를 보내는 미들웨어 예제이다.
  • 토큰(Token)은 주로 사용자 인증에 사용한다.
	app.use((req, res, next) => {
	  if(req.headers.token){
	    req.isLoggedIn = true;
	    next()
	  } else {
	    res.status(400).send('invalid user')
	  }
	})
profile
다시 보면, 더 많은 것들이 보인다.

0개의 댓글