express && 미들웨어

돌리의 하루·2023년 2월 6일
0
post-thumbnail
  • 라우팅
    라우터 : get, post요청 등 클라이언트 요청을 위한 URL 스키마

서버에서는 라우팅을 통해서 클라이언트와 통신의 인터페이스를 제공해준다.

  • 기본적인 라우팅 사용 방법
const express = require('express')
const app = express()

위와 같이 적은 후 app.post() 등의 함수를 작성할 수 있다.

  • 함수 사용
    +app 변수는 HTTP 메소드명에 해당하는 함수를 가지고 있다.

-간단한 웹서버 만들기-

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

app.get('/',(req,res)=>{
 res.status(200).send('hello world')
})

app.listen(port, ()=>{
 console.log('Example app listening at http://localhost:${port}')
})

미들웨어(Middleward)

; 요청에 필요한 기능을 더하거나, 문제가 발견된 곳을 걷어내는 역할
; express의 큰 장점이라고 할 수 있다.

미들웨어를 자주 사용하는 상황

1.POST 요청 등에 포함된 body(payload)를 구조화할 때(쉽게 얻어내고자 할 때)

-기존 Node.js Buffer

let body = [];
request.on('data', (chunk) => {
  body.push(chunk);
}).on('end', () => {
  body = Buffer.concat(body).toString();
  // 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가 담겨져 있습니다.
})
});

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

기존 - writeHead,end 메소드를 사용

const defaultCorsHeader = {
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
  'Access-Control-Allow-Headers': 'Content-Type, Accept',
  'Access-Control-Max-Age': 10
};

if (req.method === 'OPTIONS') {
  res.writeHead(201, defaultCorsHeader);
  res.end()
}

여기서 cors를 사용하면 간편하게 할 수 있다.

1. 모든 요청/응답에 CORS헤더를 붙일 때
const cors = require('cors')

app.use(cors())

2. 특정 메소드에만 붙일 때
const cors = require('cors')
app.get('/products/:id', cors(), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for a Single Route'})
})

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

  • logger를 만들어서 사용된 메소드과 url의 경로를 확인할 수 있다.
const express = require('express');
const app = express();
const port = 3000;
const cors = require('cors');

let myLogger = (req, res, next) => {
  console.log(`http request method is ${req.method}, url is ${req.url}`);
  next();
};

app.use(myLogger);
app.use(cors());

app.get('/', (req, res) => {
  res.status(200).send('hello world');
});

app.listen(port, () => {
  console.log(`this app listening at http://localhost${port}`);
});

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

http 요청에서 토큰이 있으면 함수를 실행, 아닐경우엔 에러를 보내는 미들웨어

app.use((req, res, next) => {
  // 토큰이 있는 경우만 받아준다.
  if(req.headers.token){
    req.isLoggedIn = true;
    next()
  } else {
    res.status(400).send('invalid user')
  }
})
profile
진화중인 돌리입니다 :>

0개의 댓글