비밀 키들을 소스 코드에 그대로 적어두면 소스 코드가 유출되었을 때 키도 같이 유출되는데, .env 같은 벼도의 파일에 비밀 키를 적어두고 dotenv 패키지로 비밀 키를 로딩하는 방식으로 관리합니다.
dotenv 패키지는 .env 파일을 읽어서 process.env로 만듭니다. process.env.COOKIE_SECRET에 cookiesecret 값이 할당됩니다. 키-값 형식으로 추가하면 됩니다.
<.env>
COOKIE_SECRET = cookiesecret
정적인 파일들을 제공하는 라우터 역할을 함. 기본적으로 제공되며 express 객체 안에서 꺼내 장착하면 됩니다.
app.use('요청 경로', express.static('실제 경로'));
app.use('/', express.static(path.join(__dirname, 'public'));
요청 주소에는 public이 들어있지 않기 때문에, 서버의 폴더 경로와 요청 경로가 다릅니다.
이것이 보안에 큰 도움이 됩니다.
요청의 본문에 있는 데이터를 해석해서, req.body 객체로 만들어주는 미들웨어입니다. 보통 폼 데이터나 AJAX 요청의 데이터를 처리합니다. 기본적으로 제공되며 express 객체 안에서 꺼내 장착하면 됩니다.
멀티파트 (이미지, 동영상, 파일) 데이터는 처리하지 못하므로 multer 모듈을 사용합니다.
app.use(express.json());
app.use(express.urlencoded({extended:false}));
cookie-parser는 요청에 동봉된 쿠키를 해석해 req.cookies 객체로 만듭니다.
app.use(cookieParser(비밀키));
쿠키 생성 / 제거
res.cookie('name', 'elen', {
expires: new Date(Date.now() + 90000),
httpOnly: true,
secure: true
});
res.clearCookie('name', 'elen', {httpOnly: true, secure: true});
세션 관리용 미들 웨어
로그인 등의 이유로 세션을 구현하거나 특정 사용자를 위한 데이터를 임시적으로 저장해둘 때 매우 유용app.use(세션 설정())
app.use(session({
resave: false,
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
name: 'session-cookie'
}));
이미지, 동영상 등을 비롯한 여러가지 파일들을 멀티파트 형식으로 업로드 할 때 사용하는 미들웨어
멀티 파트: enctype이 multipart/form-data인 폼을 통해 업로드하는 형식
<form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="image"/> <input type="text" name="title"/> <button type="submit">업로드</button> </form>