Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js/Express request.session未定义?_Node.js_Session_Express - Fatal编程技术网

Node.js/Express request.session未定义?

Node.js/Express request.session未定义?,node.js,session,express,Node.js,Session,Express,我有一个node/socket/express站点,它已经运行了几个月,当我尝试加载主页时,突然出现了错误。这是我的server.js文件: var bugsnag = require("bugsnag"); bugsnag.register(KEY); var Lobby = require('./lobby').Lobby var express = require('express') var engine = require('ejs-locals') var app = express

我有一个node/socket/express站点,它已经运行了几个月,当我尝试加载主页时,突然出现了错误。这是我的server.js文件:

var bugsnag = require("bugsnag");
bugsnag.register(KEY);
var Lobby = require('./lobby').Lobby
var express = require('express')
var engine = require('ejs-locals')
var app = express()
  , cookieParser = express.cookieParser('secret')
  , server = require('http').createServer(app)
  , cookie  =   require('cookie')
  , connect =   require('connect')
  , MemoryStore = connect.middleware.session.MemoryStore
  , sessionStore
  , io = require('socket.io').listen(server);

app.use(bugsnag.requestHandler);
app.use(express.static(__dirname+'/public'));
app.use(express.bodyParser());
app.use(cookieParser);
app.use(express.session({secret:'secret',key:'express.sid',store:sessionStore = new MemoryStore(),maxAge: 30*24*60*60*1000}));
app.use(bugsnag.errorHandler);

io.set('authorization', function (handshake, accept) {
  if (!handshake.headers.cookie) 
    return accept('No cookie transmitted.', false);
  handshake.cookie = cookie.parse(handshake.headers.cookie);
  cookieParser(handshake, {}, function(err) {
    if(handshake.signedCookies){
      handshake.sessionID = handshake.signedCookies['express.sid'];
      sessionStore.load(handshake.sessionID, function (err, session) {
        if (err)
          accept(err.message, false); //Turn down the connection
        else {
          handshake.session = session; //Accept the session
          accept(null, true);
        }
      });
    }
  });
});

var mysql = require('mysql');
var dbConnection;
app.configure('development', function(){
  dbConnection = mysql.createConnection({DEV_CONNECTION_STRING});
  io.set('log level', 3);
});

app.configure('production', function(){
  dbConnection = mysql.createConnection({PROD_CONNECTION_STRING});
  io.set('log level', 0);
});
dbConnection.connect(function(error){if(error){return console.log("CONNECTION error: "+error);}});

//var domain = require('domain');
app.engine('ejs', engine); // use ejs-locals for all ejs templates:
app.set('views',__dirname + '/views');
app.set('view engine', 'ejs'); // so you can render('index')

var lobbya = new Lobby(io,dbConnection,'lobbya');
var lobbyz = new Lobby(io,dbConnection,'lobbyz');

server.listen(8080); //4000

require('./routes').addRoutes(app,dbConnection);

io.sockets.on('connection', function (socket) {clientConnect(socket)});

function clientConnect(socket) {
  var session = socket.handshake.session;
  if (session == null) {
    socket.emit('sign out');
    dbConnection.query("Insert into eventlog (type, details) values ('boot no session','"+JSON.stringify(session)+"');");    
  }
  else if (session.player == null) {
    socket.emit('sign out');
    dbConnection.query("Insert into eventlog (type, details) values ('boot no player','"+JSON.stringify(session)+"');");
  }
  else {
    socket.on('join room', function (room) {
      dbConnection.query("Insert into eventlog (type, details) values ('join room','"+room+":"+JSON.stringify(session)+"');");
      if (room == 'lobbya')
        lobbya.connect('',socket,session.player);
      else if (room == 'lobbyz')
        lobbyz.connect('',socket,session.player);
      else if (room.substring(0,5) == 'gamea') //join game, figure out which game
        lobbya.gameConnect('',socket,session.player,room.substring(5,room.length),sessionStore);
      else if (room.substring(0,5) == 'gamez') //join game, figure out which game
        lobbyz.gameConnect('',socket,session.player,room.substring(5,room.length),sessionStore); 
    });
  }
}
这是发生错误的路由文件的顶部:

var Simulator = require('./simulator').Simulator;
var email = require("emailjs/email");
var url = require('url');

exports.addRoutes = function(app, dbConnection) {
  app.get('/', function(request,response){
    dbConnection.query("SELECT sum(games_finished) as games, max(longest_win_streak) as streak, max(games_won) as wins FROM players;",
    function (error, results, fields) {
      var games = Math.ceil(results[0]['games']/2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
      var streak = results[0]['streak'].toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
      var wins = results[0]['wins'].toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
      dbConnection.query("SELECT p1.username as user1, p2.username as user2, gl.player1_score, gl.player2_score, DATE_FORMAT(gl.created_at - INTERVAL 8 hour, '%b %e %l:%i %p') as created_at FROM gamelog gl join players p1 on gl.player1_id = p1.id join players p2 on gl.player2_id = p2.id where gl.end_type = 'pegout' ORDER BY gl.created_at DESC limit 3;",
       function (error, results, fields) { 
        latestResults = [];
        for (var i=0; i<results.length; i++) {
          if (results[i]['player1_score'] > results[i]['player2_score'])
        latestResults[i] = results[i]['created_at'] + ' - ' + results[i]['user1']+' def. '+results[i]['user2']+' 121-'+results[i]['player2_score'];
          else
            latestResults[i] = results[i]['created_at'] + ' - ' + results[i]['user2']+' def. '+results[i]['user1']+' 121-'+results[i]['player1_score'];
        }
        response.render('index', { player: request.session.player , error: '', room: '', games: games, streak: streak, wins: wins, latestResults: latestResults });
      });
    });
  });
}
呈现索引EJ时出错,错误与request.session.player有关。特别是,无法读取未定义的属性“player”


我不明白会话怎么可以不定义?我在当地没有这样的经历。这可能是因为它拒绝io中的握手。设置代码的“授权”部分?如果是这样的话,如果在代码的这一部分拒绝握手,那么正确的做法是什么?

我敢打赌,如果你清除cookie或在匿名窗口中打开,你会在本地看到错误。这是好主意,但两者都很好。如果我完全禁用cookie,而不是仅仅清除cookie,我将看看会发生什么