IT'S DO
728x90

# error

{"error":"Cannot set properties of undefined (setting 'userId')"}

 

# 원인

exports.login = async (req, res, next) => {
  const { email, password } = req.body;

  try {
    const user = await loginService.login(email, password);

    // 로그인 성공 시 세션에 저장 (express-session 사용 가정)
    req.session.userId = user.id;

    // 페이지 이동 or JSON 응답
    res.redirect('/user'); // 로그인 후 유저 페이지로 이동
    // 또는: res.json({ message: 'Login successful', user });
  } catch (err) {
    res.status(401).json({ error: err.message });
  }
};

req.session이 아예 없는 상태에서 req.seesion.userId를 시도 했기에 생기는 문제

 

 

# 해결 

즉 session을 생성해주면 됨.

하는곳 app.js

세션은 Express 서버에서 미들웨어(express-session)가 자동으로 만들어 주는 객체

 

app.js 안에서

const session = require('express-session');

 

// 세션
app.use(session({
  name: process.env.SESSION_NAME || 'sid',     // 쿠키 이름
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: false,
  cookie: {
    maxAge: Number(process.env.SESSION_LIFETIME) || 1000 * 60 * 60, // 1시간
    secure: false,   // HTTPS가 아니면 false (배포 환경에서 true)
    httpOnly: true   // JS에서 쿠키 접근 불가 (보안 강화)
  }
}));

 

설정 해주면 됨. name과 scret은 env로 관리

 

# 참고 

app.js는 Express 애플리케이션을 설정하는 파일

 

req.session.userId = user.id; //이 값은 서버 메모리(혹은 Redis 같은 세션 저장소)에 저장됨. 브라우저 개발자 도구에는 보이지 않음.

 

“미들웨어”란?

Node.js(특히 Express)에서 말하는 미들웨어(middleware) 는 Tomcat 같은 서버(컨테이너) 가 아니고,
요청(Request)과 응답(Response) 사이에서 실행되는 함수

즉, req(요청) → [📌 미들웨어들] → res(응답) 이런 흐름에서,
중간에 낀 함수들을 전부 “미들웨어”라고 부릅

 

모든 요청이 들어올 때마다 로그를 찍어주는 로깅 미들웨어

Express라는 서버 프레임워크 안에서 “요청 처리의 중간 단계”를 담당하는 기능

 

 

 
 
profile

IT'S DO

@멋진놈

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!