현재 사용자를 저장해야하는 NodeJS 응용 프로그램에서 세션 변수를 설정하려고합니다.NodeJS 변수 세션이 정의되지 않았습니다.
불행하게도, 난 항상 다음과 같은 오류가 발생합니다 :
내 필수의TypeError: Cannot set property 'user' of undefined
하나는 학생 프로젝트 나는 아키텍처가 요구 존중해야로서 내가 세션을 저장하는 데이터베이스를 사용하지 말아야한다는 것입니다 .
this.POSTLogin =function POSTLogin(LoginInformations,res,req){
//prepare request
var args = {
data:{username:LoginInformations.username,password:LoginInformations.password},
headers:{"Content-Type":"application/json"}
};
//check if credentials are valid
client.post(this.restBaseUrl+"users/login",args,function(data,response){
//logs for debug purpose
console.log(data);
console.log(response);
//if there is a user
if(response.statusCode == 200){
var usr = new User();
usr.email = data.email ;
usr.facebookData= data.facebookData;
usr.firstName = data.firstName ;
usr.id = data.id ;
usr.lastName = data.lastName ;
usr.restToken = data.restToken ;
usr.role = data.role ;
usr.sessions = data.sessions ;
var Rest = new RestService();
//this line doesn't work
req.session.user = usr;
//redirect to his personal page with data
Rest.GETPersonalStats(usr,res);
}else{
//is there is no user with those credentials, send it to login page again
res.redirect('/users');
}
});
};
내가 세션에 데이터를 저장하려고 아니에요, 모든 것이 예상 작품과 같이 여기
내가 내 사용자가 로그인 할 때 사용하는 기능입니다. 이 파일의 시작에서 , 나는이 :var session = require('client-sessions');
var express = require('express');
var app = express();
app.use(session({
cookieName: 'session',
secret: 'someRandomString',
duration: 30 * 60 * 1000,
activeDuration: 5 * 60 * 1000
}));
나는 나의 package.json 파일에 "클라이언트 세션"을 추가했다. 이 정보는 article을 기반으로했습니다.
편집 : @Shoyeb Memon의 답변에 따라 쿠키 세션을 사용하도록 변경되었습니다. 내가 지금 내 선언이 있습니다
var cookieParser = require('cookie-parser');
var cookieSession = require('cookie-session');
var app = express();
app.use(cookieParser('akey'));
app.use(cookieSession({
name:'session',
keys:['akey'],
maxAge: 24 * 60 * 60 * 1000
}));
하지만 오류가 전혀 변경하지 않은 ... 나는 세션을 구현하기 위해 this을 사용했다.
편집 2 : 나는 내 코드를 처음 변경 , 나는 복사 - 붙여 넣기하지 않고 그것을 할 싶어, 나는 온라인 지침을 따랐다. 하지만 복사하여 붙여 넣기를 시도했지만 "상점"이 삭제되었습니다. 이제 제대로 작동하는 것 같습니다.