미들웨어란?

morgan (로깅)

morgan이 뭐지?

HTTP request의 로그를 보여주는 NodeJS 미들웨어다

Document : https://github.com/expressjs/morgan

설치

npm install morgan
yarn add morgan

How to use

import morgan from 'morgan';

morgan('dev');

이렇게 입력만 해도 간편히 HTTP 요청 로그가 나온다. morgan() 인자로 포맷형식을 넣어야 하는데 tiny, common, combine, short, dev 가 있는데 개인적으로 dev가 제일 괜찮은 것 같다. 자세한건 문서를 읽어보자


helmet (보안)

helmet은 express 앱 보안을 도와주는 미들웨어이다. 만능은 아니지만 도움을 줄 수 있다

Document : https://helmetjs.github.io/docs/

설치

npm install helmet
yarn add helmet

How to use

import express from 'express';
import helmet from 'helmet';

const app = express();

app.use(helmet());

다른 설정도 있지만 간단하므로 문서를 참조하길 바란다


multer (파일 업로드)

multer가 뭐지?

Form 데이터로 파일을 업로드 할 때 multipart/form-data 형식으로 인코딩 하는데, multer는 이것을 다루기 위한 NodeJS 미들웨어다
( multer는 multipart/form-data 가 아닌 Form에서는 동작하지 않는다)

// 꼭 encoding type을 넣어야한다!!!!!!!!!!
 <form action="/upload" method="post" enctype="multipart/form-data"></>

Document : https://github.com/expressjs/multer/blob/master/doc/README-ko.md

설치

npm install multer
yarn add multer

설정

multer를 적용할 파일에 코드를 작성한다

import multer from 'multer';

const upload = multer({ dest: 'uploads/' });
const uploadMiddleware = upload.single('name');

dest : destination 의 약자로 업로드한 파일을 저장할 주소를 뜻한다
single() : single은 파일 한개만 업로드 하는 메서드이고, 인자로 input의 name 속성을 받는다

위의 방법으로 설정하면 파일 이름이 깨져서 저장될 것이다. 그러니 파일을 디스크에 저장하기 위한 모든 제어 기능을 제공하는 Disk Storage를 사용하여 저장 파일을 제어할 것이다

결론적으로 위의 코드 말고 아래의 코드를 사용하면 된다

import multer from 'multer';

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads') // cb 콜백함수를 통해 전송된 파일 저장 디렉토리 설정
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname) // cb 콜백함수를 통해 전송된 파일 이름 설정
  }
})

const upload = multer({ storage: storage });
const uploadMiddleware = upload.single('name');

How to use

업로드 요청과 요청처리 메서드 사이에 upload 미들웨어를 넣으면 된다

app.post('/upload', uploadMiddleware, handleUpload );

handleUpload

const handleUpload = (req,res)=>{
  const { body : { etr1, etr2 }, file } = req;
  console.log(file);
  res.send();
}

주의❗️ 보통 Form 데이터는 body에 들어있지만 multer을 사용하면 파일만 따로 req.file로 들어가있다


Passport(인증)

이건 너무 길어질 것 같아서 따로 포스트로 작성했다