TIL 8주차 Express 라우터 / 유용한 미들웨어

lim1313·2021년 9월 10일
0

TILPLUS

목록 보기
22/40

Router

메소드와 URL(/lower, /upper 등)로 분기점을 만드는 것을 라우팅(Routing)이라고 한다.

아래와 같이 경로를 묶어 처리해 줄 수 있다.

import express from 'express';
const app = express();
app.use(express.json());

app
  .route('/posts')
  .get((req, res, next) => {
    res.status(201).send('GET');
  })
  .post((req, res, next) => {
    res.status(201).send('POST');
  });

app.listen(8080);

하지만, 경로가 더 복잡해지면 이것 또한 가독성, 모듈성, 유지보수성이 떨어진다.

때문에, 아래와 같이 router를 통해 모듈화 시킨다.

app.js

import express from 'express';
import postRouter from './router/post.js';
import userRouter from './router/user.js';

const app = express();

app.use(express.json());

app.use('/posts', postRouter);
app.use('/user', userRouter);

app.use((error, req, res, next) => {
  console.log(error);
  res.status(500).send('sorry, try later!');
});

app.listen(8080);

user.js

import express from 'express';

const router = express.Router();

router.get('/', (req, res) => {
  res.status(201).send('GETGET / user');
});

router.post('/', (req, res) => {
  res.status(201).send('POSTPOST / user');
});

export default router;

post.js

import express from 'express';

const router = express.Router();

router.get('/', (req, res) => {
  res.status(201).send('GETGET / post');
});

export default router;

유용한 미들웨어

express.json() / POST 처리

REST API에서 Body를 파싱할 때 사용

미들웨어 없이req.body 에 접근하는 경우에는 기본으로undefined 가 설정되어 있다.

때문에, express에서 body의 내용을 읽기 위해서는 expresss.json() 혹은 body.parser을 이용해야 한다.

official express.json() doc

app.use(express.json());
// app.use(express.json({strict:false}));

app.post('/', (req,res,next) => {
    console.log(req.body)
}

express.json 미들웨어는 요청이 들어오는 body부분을 자동으로 parsing하여 보여준다.

  • strict : default : true : 배열과 객체만 JSON.parse를 해준다.
  • strict : false : 배열과 객체가 아니더라도 스트링 등 다양한 데이터 형태에 대해 JSON.parse를 해준다.

express.urlencoded()

HTML From UI요소에서 submit를 하면 request가 자동으로 발생하게 되고 그때 전달된 HTML에서 만든 데이터를 Body 안으로 파싱해준다.

옵션을 꼭 전달해 주어야한다.

app.use(express.urlencoded({extended: faslse}))


express.static()

express.static()

자동으로 public안의 파일들을 사용자가 읽어갈 수 있도록 한다.

app.use(express.static('public'))

express.static('public')이 없는 경우
public안의 example.img를 응답해주기 위해서는

app.get('/public/exampl.img', (req,res) =>{...}) 등과 같은 처리를 해주어야 하지만,
위의 express.static('public')만 설정해주면, 따로 처리하지 않아도 public안의 모든 리소스를 사용자가 읽어갈 수 있도록 허용할 수 있다.

다양한 옵션을 설정해 줄 수 있다.

var options = {
  dotfiles: 'ignore',
  etag: false,
  extensions: ['htm', 'html'],
  index: false,
  maxAge: '1d',
  redirect: false,
  setHeaders: function (res, path, stat) {
    res.set('x-timestamp', Date.now())
  }
}

app.use(express.static('public', options))

request안의 cookie를 보려면 cookie-parser를 사용해야 한다.

npm i cookie-parser

import cookieParser from 'cookie-parser'
app.use(cookieParser()) 

morgan

로깅(logging)에 도움을 주는 미들웨어
client에서 요청한 메소드나 상태코드 등을 남긴다.

npm morgan

npm i morgan

import morgan from 'morgan'
app.use(morgan('combined'))
// app.use(morgan('tiny')) 

helmet

보안에 필요한 공통적인 헤더를 추가해준다.

npm helmet

npm i helmet

import helmet from 'helmet'
app.use(helmet())

profile
start coding

0개의 댓글