server.ts
connect-redis provides Redis session storage for Express
유저가 로그인할 때 해당 정보가 db에 있다면 token(랜덤 string)을 생성해서 redis에 저장한다. 유저가 이후 요청을 할 때마다 해당 token을 보내고 이를 확인해서 redis가 가지고 있는 랜덤 스트링과 일치하면 유저의 정보를 보내준다.
express.urlencoded({extended: true/false})
옵션1)extended: false - NodeJs에 기본으로 내장된 querystring모듈을 사용합니다.
옵션2)extended: true - 추가로 설치가 필요한 qs모듈을 사용(express에 포함되어 자동설치)
이렇게 원하는 형태의 string에 접근하려면 true로 해주는 것이 좋다
express.json()
정리
둘 다 쓸 거면 둘 다 app.use 안에 사용하면 됨
cf. 둘은 모두 bodyparser 사용
cookie : 쿠키는 웹 브라우저에 저장되는 '키-밸류' 타입의 데이터
express-session : 쿠키와 달리 서버에 데이터를 저장하고 웹 브라우저는 Session ID만을 가지고 있기 때문에 비교적 안전합니다
과정
- 서버는 웹 브라우저에게 세션 값을 보내줍니다. (sid 라고 하며, 아무런 의미도 없는 단순 식별자입니다.)
- 클라이언트는 접속할 때 자신이 가지고 있는 sid를 서버에게 전달합니다.
- 서버는 클라이언트가 보내준 sid를 가지고, 해당 유저를 식별합니다.
express-session만을 가지고는 여러 사용자에게 세션이라는 기능을 제공할 수 없습니다. 저장소를 사용하지 않기 때문.
express-session로 만든 session은 아래와 같은 곳에 저장될 수 있다
- 파일에 저장
- DB에 저장
- Memory 에 저장
ex. redis에 저장. connectRedis 라이브러리를 통해 redis의 주소만 전달해주면 그 곳에 세션을 저장할 수 있다
app.use(cookieParser());
app.get('/', function(req,res){
console.log(req.cookies)
})
app.listen(8080)
cf. _. : 비동기 함수
해당하는 힉번이 없으면 학번이 틀린 거고 학번이 있는데 캠퍼스가 없으면 학교가 틀린 것
이렇게 확인하는 절차 필요
이럴 때는 에브리타임 메인 화면으로 리다이렉트
page파일로 가기 전에 router파일에서 데이터를 모두 받아온다
Entity 폴더에서 각각의 데이터가 필요한 타입을 받아온다
현재 사용자의 데이터,
params로 받은 데이터 등등
사용하려고 하는 정보들을 변수로 만들어서 사용하기 편하게 한다
auth를 거쳐서 currentUser의 상태가 업데이트되도록 한다
}
cf. db에서 데이터 가져오는 방법
const timetablePool = mysql.createPool({
database 관련 정보들, rds처럼 aws에 띄운 데이터베이스 주소, 비밀번호 포트, 사용자 등을 config.get으로 가져와서 푼다
})해서 안에서 구한다
const [rows] = await timetablePool.query<Row[]>({sql:query})
해당 쿼리문의 조건을 모두 만족하는 데이터를 가져온다
이때 <Row[]>는 강의, 과목, 인기 강의 각각의 인터페이스로, 더 구체적인 내용들의 타입을 지정한다