# 세션
쿠키는 브라우저에 남기는 데이터라면 세션은 서버에 남기는 데이터이다.
db랑은 좀 다르게 세션 데이터는 영구저장되지 않는다.
쿠키는 크기가 작다는 단점이 있는데 세션은 더 많은 정보를 담을 수 있어서 사용된다.
일단 세션 사용을 하기 위해선 패키지를 설치해야합니다.
https://www.npmjs.com/package/express-session
express-session
Simple session middleware for Express. Latest version: 1.17.3, last published: a year ago. Start using express-session in your project by running `npm i express-session`. There are 4644 other projects in the npm registry using express-session.
www.npmjs.com
npm i express-session
npm 패키지 설치후
const express = require('express');
const app = express();
const session = require('express-session');
app.use(session({secret: 'thisisnotagoodsecret'}));
app.get('/viewcount', (req, res) => {
res.send(`you have viewed this page`);
})
app.listen(3000, ()=> {
console.log('server')
})
세션과 포트, 라우트 세팅을 합니다.
세션에는 여러값을 넘길 수 있고 현재는 임시 비밀키를 넘겨줍니다.
해당 url에 접속해서 확인해보면
세션은 쿠키로 세션 id를 전달하기 때문에
쿠키확인 하는 경로에서 세션 데이터를 확인할 수 있습니다.
아래의 코드를 보겠습니다
app.get('/viewcount', (req, res) => {
if (req.session.count){
req.session.count += 1;
} else {
req.session.count = 1;
}
res.send(`you have viewed this page ${req.session.count} times`)
})
일단 접속을 하면 세션이 존재하지 않기 때문에 1로 세팅됩니다.
이후 새로고침을 하면 count가 1씩 증가합니다.
이 세션은 브라우저가 종료될때까지 남아있습니다.
# express-session 중단 경고
express-session을 임포트하고
node를 실행시켜보면
아래처럼 중단 경고가 뜨는데요
세션을 넘길때 몇 개의 옵션을 추가해주어야 합니다.
세션 디폴트 옵션을 사용하게 되면 이런 경고가 뜹니다.
아래처럼 save 관련 옵션을 false로 지정해주면 됩니다.
const sessionOptions = { secret: 'thisisnotagoodsecret', resave: false, saveUninitialized: false}
app.use(session(sessionOptions));
# 플래시
세션에서 사용자에게 메시지를 출력하는 장소 (ex. 완료 메시지, 확인 메시지)
https://www.npmjs.com/package/connect-flash
connect-flash
Flash message middleware for Connect.. Latest version: 0.1.1, last published: 10 years ago. Start using connect-flash in your project by running `npm i connect-flash`. There are 635 other projects in the npm registry using connect-flash.
www.npmjs.com
패키지 설치
npm i connect-flash
사용법은 간단합니다.
const express = require('express');
const app = express();
const session = require('express-session');
const flash = require('connect-flash');
const sessionOptions = { secret: 'thisisnotagoodsecret', resave: false, saveUninitialized: false}
app.use(session(sessionOptions));
app.use(flash());
app.get('/', (req, res) => {
req.flash('success', 'success join page') // 플래시 메시지 호출
res.render('page', {message: req.flash('success')}) // 플래시 메시지 전달
})
app.listen(3000, ()=> {
console.log('server')
})
먼저 flash를 호출을 해준 뒤에
메시지를 출력할 템플릿에 flash 를 전달 후
해당템플릿에서 message 를 출력하면 됩니다.
전역으로 사용하는 방법도 있습니다.
app.use((res, req, next) => {
res.locals.message = req.flash('success');
next();
})
모든 템플릿에서 message에 접근할수 있게되었고
렌더메소드에 매번 넘겨줄 필요가 없게되었습니다
error 메시지가 필요하다면 error 를 넣어주면 됩니다.
'nodejs' 카테고리의 다른 글
[node.js] express 쿠키 보내기, 파서, 서명 (0) | 2023.06.15 |
---|---|
[node.js] express 에러, 비동기 에러 처리 (0) | 2023.06.14 |
[node.js] mongoose를 미들웨어로 정의하기 (0) | 2023.05.30 |
[node.js / express] REST API, RESTful API, npm(UUID, method_override) CRUD 구현 (0) | 2023.05.19 |
[node.js / express] 요청 구문 분석하기(get, post) (0) | 2023.05.18 |