express와 미들웨어

Jay·2020년 12월 30일
0

express

라우팅

라우터: GET , POST 요청 등 클라이언트 요청을 위한 URL 스키마

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

1. 기본적인 라우팅 사용 방법

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

ㄴ 위와 같이 설정 코드를 작성한 후 app.get, app.post 등의 함수를 활용할 수 있다.

--

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

아래의 함수를 주로 사용한다.

  • app.get()
  • app.post()
  • app.put()
  • app.delete()
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}')
})

// 작성 후 node app.js 명령어로 실행, localhost:3000에서 결과를 확인

미들웨어

자주 쓰는 미들웨어

case 1. 모든 요청에 대해 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}`);
});

myLogger라는 함수를 만들어 메소드가 사용될 때마다 메소드명과 url을 출력하도록 해주었다.
아래 첨부사진(터미널) 확인

case 2. POST 요청 등에서 쓰이는 body(payload)를 쉽게 얻어내고자 할 때

body-parser를 활용한다.

기존 - 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가 담겨져 있습니다.
})

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

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

case 4. 요청 헤더에 사용자 인증 정보가 담겨있는지 확인하고 싶을 때

인증 정보 확인 미들웨어 구현

http 요청에서 토큰이 있는지 여부를 판단, 이미 로그인했다면 성공, 아닐경우 에러를 보내는 미들웨어

app.use((req, res, next) => {
  // 토큰이 있는 경우만 받아준다.
  if(req.headers.token){
    req.isLoggedIn = true;
    next()
  } else {
    res.status(400).send('invalid user')
  }
})
profile
programming!

0개의 댓글