【问题标题】:express session Cannot set property 'id' of undefined快速会话无法设置未定义的属性“id”
【发布时间】:2016-08-21 07:44:34
【问题描述】:
var redis = require('redis');
var router = express.Router();
var mysql = require('mysql');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var client  = redis.createClient();
var session = require('express-session'),
RedisStore = require('connect-redis')(session);
var app = express();
app.use(cookieParser);
app.use(session({
    store : new RedisStore({
    host:'localhost',
    port:7351,
    maxAge: 300000,
    client:client,
    ttl:260
   }
 ),
 secret:'dafdsa',
resave:false,
saveUninitialized:true,
}));

这是我的设置,这是我的代码

router.post('/', function(req, res, next) {
  var id = req.body.userid;
  var passwd = req.body.password;
  var sess = req.session;
  var login_chk = pool.getConnection(function(err,connection){
      connection.query('SELECT U_passwd FROM Member WHERE U_id = ?',[id],function(err,row,req){
         if(err)console.log(err);
      var sqlpasswd = row[0].U_passwd;
      var answer = 0;
      answer = passwd_chk(passwd,sqlpasswd);
      if(answer ===1){
          save_session(id);
          res.render('main');
      }


var save_session = function(req){
    req.session.id = req; 
}

我将发布(登录)并在会话中保存 id 但此代码总是错误无法设置属性...我该如何解决它?... 谢谢回答

【问题讨论】:

  • 发生这种情况是因为您以save_session(req) 的身份传递了userId,而userId 没有session.id

标签: javascript node.js redis express-session


【解决方案1】:

发生这种情况是因为您将 userId 作为 save_session(req) 参数传递。然后你在做req.session.id = req; 在你的情况下与userId.session.id = userId; 相同。该错误通知您 userId 没有 session 属性(显然)。您只需要传递requserId 作为参数。像这样更改您的代码。

router.post('/', function(req, res, next) {
  var id = req.body.userid;
  var passwd = req.body.password;
  var sess = req.session;
  var login_chk = pool.getConnection(function(err,connection){
      connection.query('SELECT U_passwd FROM Member WHERE U_id = ?',[id],function(err,row,req){
         if(err)console.log(err);
      var sqlpasswd = row[0].U_passwd;
      var answer = 0;
      answer = passwd_chk(passwd,sqlpasswd);
      if(answer ===1){
          save_session(req,id);        <--- Change this
          res.render('main');
      }


var save_session = function(req,id){   <--- Change this
    req.session.id = id;               <--- Change this
}

希望对你有帮助。

【讨论】:

  • 感谢您的回答!但我也有同样的错误,我控制台日志 req 和 id 值 req 显示 [object object] 和 id 值显示我的 id 值我能做什么....
  • mmmmm print console.log(req.session.id) 并告诉我显示的值是什么
  • 我很抱歉你的帮助我很遗憾我使用护照的会话:'(感谢你的帮助祝福你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多