본문 바로가기

Learn/HTTP&네트워크

express

 

Express란?

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

(다른 프레임워크로는 MERN stack이라 불리는 MongoDB, Express, React, Node.js가 있다.)

 

Express는 라우터미들웨어라는 기능이 장점이다

 

 

사용법

 

설치하기

npm install express

 

간단히 만드는 Express 서버 코드

const express = require('express')
const app = express()
const port = 3000

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

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

 

핵심기능

1. 라우팅

URI(또는 경로) 및 특정한 HTTP 요청 메소드(GET, POST 등)인 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것

app.METHOD(PATH, HANDLER)

예제

// /user 라우트에 대한 응답

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

app.post('/', function (req, res) {
  res.send('Got a POST request');
});

app.put('/user', function (req, res) {
  res.send('Got a PUT request at /user');
});

app.delete('/user', function (req, res) {
  res.send('Got a DELETE request at /user');
});

 

2. 미들웨어

미들웨어란?

요청 오브젝트(req),응답 오브젝트 (res), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수 대한 액세스 권한을 갖는 함수

미들웨어는 말 그대로 프로세스 중간에 관여하여 특정 역할을 수행

 

미들웨어를 사용하는 상황

 

  • POST 요청 등에 포함된 body(payload)를 구조화할 때(쉽게 얻어내고자 할 때)
  • 모든 요청/응답에 CORS 헤더를 붙여야 할 때
  • 모든 요청에 대해 url이나 메서드를 확인할 때
  • 요청 헤더에 사용자 인증 정보가 담겨있는지 확인할 때

 

POST 요청 등에 포함된 body(payload)를 구조화

Node.js로 HTTP body(payload)를 받을 때에는 Buffer를 조합해서 다소 복잡한 방식으로 body를 얻을 수 있습니다. 네트워크 상의 chunk를 합치고, buffer를 문자열로 변환하는 작업이 필요하지만 

Express에서는 간단하게 사용 가능

npm install body-parser

const jsonParser = express.json();

app.post('/api/users', jsonParser, function (req, res) {

})

const jsonParser = express.json({strict: false});
// strict:false를 쓰는 이유는 기본적으로 true값을 받는데 배열과 객체만 전달받을 수 있고
// false인 경우는 모든 타입을 받을 수 있다. 
app.post('/api/users', jsonParser, function (req, res) {

})

 

모든 요청/응답에 CORS 헤더를 붙여야 할 때

Node.js HTTP 모듈을 이용한 코드에 CORS 헤더를 붙이려면, 응답 객체의 writeHead 메서드를 이용할 수 있습니다. Node.js에서는 이 메서드 등을 이용하여 라우팅마다 헤더를 매번 넣어주어야 합니다. 그뿐만 아니라, OPTIONS 메서드에 대한 라우팅도 따로 구현해야 하지만

Express에서는 간단하게 사용 가능

npm install cors

// 모든 요청에 대한 허용
const cors = require('cors');

app.use(cors());

// 특정 요청에 대한 허용
const cors = require('cors')

app.get('/products/:id', cors(), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for a Single Route'})
})

 

모든 요청에 대해 url이나 메서드를 확인할 때

endpoint가 / 이면서, 클라이언트로부터 GET 요청을 받았을 때 적용되는 미들웨어

 

모든 요청에 대해 메서드와 url을 출력 예시

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

const myLogger = function (req, res, next) {
  //req를 활용합니다.
  next();
};

app.use(myLogger);

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

app.listen(3000);

 

요청 헤더에 사용자 인증 정보가 담겨있는지 확인할 때

 

HTTP 요청에서 토큰이 있는지를 판단하여, 이미 로그인한 사용자일 경우 성공, 아닐 경우 에러를 보내는 미들웨어 예제

(토큰(Token): 주로 사용자 인증에 사용)

app.use((req, res, next) => {
  // 토큰이 있는지 확인, 없으면 받아줄 수 없음.
  if(req.headers.token){
    req.isLoggedIn = true;
    next();
  } else {
    res.status(400).send('invalid user')
  }
})

 

'Learn > HTTP&네트워크' 카테고리의 다른 글

웹 접근성  (0) 2023.03.03
웹 표준  (0) 2023.03.02
SOP,CORS  (0) 2023.02.06
Rest API  (0) 2023.01.31
추가 개념 OSI 7 layer 네트워크의 7 계층  (0) 2023.01.31