【问题标题】:NodeJS Variable Sessions undefinedNodeJS 变量会话未定义
【发布时间】:2018-05-29 12:28:48
【问题描述】:

我正在尝试在我的 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 文件中添加了“client-sessions”。 我根据这个article跟踪了信息。

编辑: 根据@Shoyeb Memon 的回答,我改为使用cookie-session。我现在在我的声明中有这个:

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: 当我第一次更改代码时,我想不复制粘贴,我按照网上的说明进行操作。但是我确实尝试了全部复制粘贴,我删除了“商店”,现在它似乎可以正常工作了。

【问题讨论】:

    标签: javascript node.js session login session-variables


    【解决方案1】:

    我会给你一个我以前工作中的例子,可能是 对你有帮助

    我用过 express-session

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

    使用可以使用会话来存储您从文本输入中获得的数据。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 2014-06-16
      • 2015-11-05
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 2011-10-27
      • 2018-06-29
      相关资源
      最近更新 更多