簡體   English   中英

NodeJS變量會話未定義

[英]NodeJS Variable Sessions undefined

我正在嘗試在應該存儲當前用戶的NodeJS應用程序中設置會話變量。

不幸的是,我總是得到以下錯誤:

TypeError:無法設置未定義的屬性“用戶”

我的必要條件之一是,我不應該使用數據庫來存儲會話,因為這是一個學生項目,因此我必須尊重所要求的體系結構。

這是我用來登錄用戶的功能:

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文件中添加了“客戶端會話”。 我根據這篇文章了解了信息。

編輯:基於@Shoyeb Memon的答案,我更改為使用cookie會話。 我現在在聲明中有此內容:

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

但是錯誤根本沒有改變...我用來實現會話。

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

我已經設置了cookie並將會話存儲在數據庫中

在我的API之一中使用會話:

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

 }

Use可以使用該會話來存儲您從文本輸入中獲取的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM