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라는 서버 프레임워크 안에서 “요청 처리의 중간 단계”를 담당하는 기능
'개발 > node.js' 카테고리의 다른 글
| [node] 환경변수 잡기 (0) | 2024.03.05 |
|---|---|
| [node] intellij express 프로젝트를 만들었는데, 프로젝트 안의 폴더가 안보일 시에 (0) | 2023.02.23 |
| [node] app.js 해석 및 풀이 (프로젝트 생성 시 만들어지는 핵심 js) (0) | 2023.02.21 |
| [node] Intellij Express Server 구축 방법 (0) | 2023.02.20 |
| [node] node.js 쓰는 이유와 클라이언트, 서버 요청 응답 내용 정리 (0) | 2022.12.29 |