2017-12-15 25 views
0

현재 사용자를 저장해야하는 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 : 나는 내 코드를 처음 변경 , 나는 복사 - 붙여 넣기하지 않고 그것을 할 싶어, 나는 온라인 지침을 따랐다. 하지만 복사하여 붙여 넣기를 시도했지만 "상점"이 삭제되었습니다. 이제 제대로 작동하는 것 같습니다.

답변

2

난 당신이

내가 쿠키를 설정 한

const session = require('express-session'); 
const bodyParser = require('bosy-parser'); 

//Set Cookie 
app.use(session(
{ 
name: 'myName', 
secret: '#@$#!ng', 
resave: true, 
saveUninitialized: true, 
overwrite: true, 
unset: 'destroy', 
rolling: true, 
"cookie": { 
    maxAge: 1000 * 60 * 15000000 
    }, 
store: new (require('express-sessions'))({ 
    storage: 'mongodb', 
    instance: mongoose, // optional 
    host: 'localhost', // optional 
    port: 27017, // optional 
    db: 'codepost', // optional 
    collection: 'mysessions', // optional 
    expire: 1000 * 60 * 15000000 
    }) 
} 
)); 

명시 세션을 사용하고 내 세션을 저장 도움에 될 수 내 이전 직장에서 당신에게 그것의 예를 줄 것이다

const express = require('express'); 
const app = express(); 
const router = express.Router(); 

router.post("/validate", function(req,res){ 

    req.session.phoneNumber = req.body.phoneNumber;//storing value into 
               // session 

    let userPhoneNumber = req.session.phoneNumber;//assigning to a var 
    console.log(userPhoneNumber); 

} 
: 내 API 중 하나의 세션을 사용하여 내 데이터베이스

사용하면 세션을 사용하여 텍스트 입력에서 가져온 데이터를 저장할 수 있습니다.