Cannot read property 'connect.sid' of undefined at Layer.session - ExpressJS session

孤街醉人 提交于 2019-12-08 05:40:28

问题


I am having problems using sessions in ExpressJS 4.

I have tried adding session both in server.js (where I set my app's configurations) and in routes.js (where I define my routes). This is what I keep getting:

TypeError: Cannot read property 'connect.sid' of undefined at Layer.session [as handle]
(/Users/larissaleite/Documents/Routing/node_modules/express-session/index.js:115:32) at trim_prefix 
(/Users/larissaleite/Documents/Routing/node_modules/express/lib/router/index.js:226:17) at c 
(/Users/larissaleite/Documents/Routing/node_modules/express/lib/router/index.js:198:9) at 
Function.proto.process_params 
(/Users/larissaleite/Documents/Routing/node_modules/express/lib/router/index.js:251:12) at next 
(/Users/larissaleite/Documents/Routing/node_modules/express/lib/router/index.js:189:19) at 
Layer.expressInit [as handle] 
(/Users/larissaleite/Documents/Routing/node_modules/express/lib/middleware/init.js:23:5) at 
trim_prefix (/Users/larissaleite/Documents/Routing/node_modules/express/lib/router/index.js:226:17) 
at c (/Users/larissaleite/Documents/Routing/node_modules/express/lib/router/index.js:198:9) at 
Function.proto.process_params 
(/Users/larissaleite/Documents/Routing/node_modules/express/lib/router/index.js:251:12) at next 
(/Users/larissaleite/Documents/Routing/node_modules/express/lib/router/index.js:189:19)

I defined the session like this (server.js):

var express  = require('express');
var app      = express();                                   // create app with express
var connect = require('connect');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');

var passport = require('passport');

var session = require('express-session');

connect()
  .use(cookieParser('appsecret'))
  .use(function(req, res, next){
   res.end(JSON.stringify(req.cookies));
});

app.use(session({ secret: 'appsecret', saveUninitialized: true, cookie: { secure: true, maxAge: new Date(Date.now() + 3600000) }, key:'connect.sid' }));

I've also tried removing the key.

When trying to define the session in routes.js, it was like this:

app.use(session({ secret: 'appsecret', saveUninitialized: true, cookie: { secure: true, maxAge: new Date(Date.now() + 3600000) }, key:'connect.sid' }));

app.use(passport.initialize());
app.use(passport.session());

回答1:


Remove connect all together. Express 4 was a big overhaul that removed connect as a dependency. remove all parts that require / call connect. Also update all your dependencies.

Per the express-session middleware module's docs: name - cookie name (formerly known as key). (default: 'connect.sid')

Don't pass it anything and it will use the express sid. I've copied your code and tested it without connect and I'm not getting those errors. Also, I've added the resave key to the session config object to mute the deprecated warnings (if you're running the latest express 4 version).

var express = require('express');
var app = express(); // create app with express
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');

var passport = require('passport');

var session = require('express-session');

app.use(session({
  secret: 'appsecret',
  resave: false,
  saveUninitialized: true,
  cookie: {
    secure: true,
    maxAge: new Date(Date.now() + 3600000)
  }
}));

app.listen(1234);



回答2:


First of all update your node version to latest version :

sudo npm cache clean -f
sudo npm install -g n
sudo n stable

Update all dependence packages :

npm i -g npm-check-updates
ncu -u
npm install

If required

npm audit fix


来源:https://stackoverflow.com/questions/26107414/cannot-read-property-connect-sid-of-undefined-at-layer-session-expressjs-ses

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!