2017-12-15 9 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の回答に基づいて、私はcookie-sessionを使用するように変更しました。私はセッションを実装するためにthisを使用 ...

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 
})); 

が、エラーは全く変化しなかった:私は今、私の宣言でこれを持っています。

EDIT 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の一つでセッションを使用して、私のデータベース

セッションを使用して、テキスト入力から取得したデータを保存できます。

関連する問題