dotenv, morgan, express-session, cookie-parser

Posted by yunki kim on November 26, 2020

1. dotenv

  환경 변수를 .env파일에서 불러오는 모듈이다. 세션, 쿠키의 경우 키가 필요한데 이를 코드에 직접 넣을 경우 코드가 유출되면 키도 같이 유출되는 문제가 있다. 이를 방지하기 위해 .env파일에 이를 저장하고 process.env.VALUE_NAME을 통해 불러온다.

  .env에는 VALUE_NAME=value_name이런식으로 쌍을 이루게 해서 저장하면 된다.

2. morgan

  morgan은 서버 실행 시 request/response 로그를 서버 터미널에서 보여준다. app.use(morgan(option))을 통해 사용 가능하며 option에는 dev, tiny, short, common, combined가 들어갈 수 있다. 각 option별로 터미널에서 보여주는 로그의 정보 양이 다르다. 

3. express-session

  세션 미들웨어다. session({option})을 통해 만들 수 있고 option을 통해 세션의 세부적인 내용을 설정할 수 있다.

4. cookie-parser

request cookie를 파싱한다.

const express = require('express');
const morgan = require('morgan');
const cookie_parser = require('cookie-parser');
const session = require('express-session');
const dotenv = require('dotenv');
const path = require('path');

dotenv.config();
const index_router = require('./routes');
const user_router = require('./routes/user');

const app = express();
app.set('port', process.env.PORT || 3000);

app.use(morgan('dev'));

app.use('/', express.static(path.join(__dirname, 'public')));
//미들웨어이다. json request를 파싱한다
app.use(express.json());
//form을 보냈을떄 req.body로 파싱한다. extended가 false면 querystring, true면 qs를 사용한다
app.use(express.urlencoded({extended: false}));
//주어진 secret으로 쿠키를 서명한다. 
app.use(cookie_parser(process.env.COOKIE_SECRET));
//주어진 옵션에 따라 세션을 만드는 미들웨어
app.use(session({
    resave: false,//session store에 session 저장
    //session은 새로 선언됬지만 수정되지 않았을때 unintialized하다
    saveUninitialized: false,
    //session ID cookie에 서명을 할떄 사용된다. 
    secret: process.env.COOKIE_SECRET,
    //session ID cookie의 객체 세팅. 
    cookie: {
        httpOnly: true,
        secure: false,
    },
    //응답에 설정할 세션 쿠키
    name: 'session-cookie',
}));

app.use('/', index_router);
app.use('/user', user_router);

app.use((req, res, next) => {
    res.status(404).send('Not Found');
});

app.use((err, req, res, next) => {
    console.error(err);
    res.status(500).send(err.message);
})

app.listen(app.get('port'), () => {
    console.log(`${app.get('port')} start server`);
});