inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

미들웨어 확장으로 아예 기능이 달라지기도 하는지 질문드리고 싶습니다

해결된 질문

291

Like me black

작성한 질문수 65

0

강사님 안녕하세요

다음 진도로 넘어가겠다는 말씀을 드리고 dotenv 실습 중이었는데

또 session에서 미들웨어 확장을 한번 시도하다가 아예 기능이 변하는 걸 발견해서 궁금한 점이 생겨서 질문드리고 싶습니다

 

아래에 session을 미들웨어 확장한 코드(빨간색)와 확장하지 않은 코드(초록색)가 있습니다

 

 

위쪽의 확장버전은 세션은 생기지만 로그인이 안되었고

아래쪽의 미확장버전은 세션도 생기고 로그인이 잘되었습니다

 

이유를 분석해봤습니다

session 미들웨어를 확장한 경우

87행 리다이렉션 뒤에 다시 28행으로 가서 세션을 새로 세팅했습니다

그래서 req.session.name 이 소멸되어서 로그인이 안되었습니다

 

 

반면에 session 미들웨어를 확장하지 않은 경우에는

41행의 session 미들웨어는 처음 딱 1번만 호출되고

87행 리다이렉션 다음에 90행 app.get('/') 으로 이동했습니다

그래서 req.session.name이 소멸되지 않았습니다

 

 

 

미들웨어 확장법을 static 가르쳐주실 때 배운 건데 

session 미들웨어도 한번 확장해봤는데,

혹시 제가 잘못 확장한건지 질문드리고 싶습니다

 

구글링도 해봤는데, (req,res,next)=>{미들웨어(req,res,next)} 로 사용하는 것 같아서요

session 미들웨어에서 확장은 금지인지 질문드리고 싶습니다


긴 질문을 읽어주셔서 고맙습니다

mongodb mysql nodejs Sequelize

답변 1

1

제로초(조현영)

함수의 호출은 리턴값으로 대체된다고 했죠?

session의 리턴 값은 (req, res, next) => { 세션 관련 코드 } 함수입니다.

즉 app.use(session({...}))은 app.use((req, res, next) => { 세션 관련 코드 }) 입니다. session 함수는 처음 한 번만 호출되고 그 다음부터는 (req, res, next) => { 세션 관련 코드 } 함수가 호출됩니다.

그런데

app.use((req, res, next) => {
  session({...})(req, res, next)
});

를 하면

매번 session 함수가 호출됩니다. 그래서 결과가 다르게 나오는 겁니다. session 함수는 한 번만 호출되어야 합니다.

즉, session 미들웨어는 확장하면 작동이 달라집니다.

0

Like me black

상세하게 가르쳐주셔서 정말 감사합니다

앞으로는 미들웨어를 확장할 때, 먼저 사용예시들을 검색해보고, 괜찮은 것 같은 미들웨어만 확장하겠습니다

리눅스 노드 설치시 패키지

0

172

0

socket.js 에서 referer로부터 roomId를 가져올 때

0

932

3

스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문

0

2297

2

a[title] 질문드립니다

0

388

1

리뉴얼 강의 및 공부 방법

0

590

1

jwt decode

0

1138

1

node.js 교과서 3판 질문드립니다

0

398

1

passport와 jwt

0

439

1

리뉴얼 강의

0

428

2

혹시 Node.js 교과서 3판 이북은 언제 나오나요?

0

359

1

몽고디비 사용자도 MYSQL부분을 들어야 하나요???

0

491

1

sql 쿼리 로그는 어떤 모듈이 작성하나요?

0

512

2

nunjucks res.render('error'); 작동을 안합니다.

0

520

1

질문있습니다.

0

349

1

multer 한글 파일 업로드시 파일명이 깨져요.

1

3545

1

수업자료는 어디있나요?

0

374

1

질문 있습니디

0

245

1

multer 사용시 file 외 name값은 못받나용?

0

431

1

코드 중복 부분 질문드립니다.

0

303

1

api 만드는 이유 질문드립니다.

0

294

1

Strategy의 done에 대해 질문드립니다.

0

375

1

안녕하세요 fs 권한 관련 질문드립니다

0

456

1

시퀄라이즈 연결질문...

0

511

2

res.setHeader vs res.cookie

0

1799

3