【问题标题】:Cannot read property 'connect.sid' of undefined at Layer.session - ExpressJS session无法读取 Layer.session - ExpressJS 会话中未定义的属性“connect.sid”
【发布时间】:2014-11-24 06:56:59
【问题描述】:

我在 ExpressJS 4 中使用会话时遇到问题。

我尝试在 server.js(我设置应用程序的配置)和 routes.js(我定义路由)中添加会话。这就是我不断得到的:

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)

我这样定义会话(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' }));

我也试过移除钥匙。

尝试在 routes.js 中定义会话时,是这样的:

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

【问题讨论】:

  • 您运行的是什么版本的 express?它似乎是 express 4,但你为什么还要包括 connect 是没有意义的。
  • 快递4!应该怎么样?
  • 当然,发布了答案:D

标签: node.js session express passport.js


【解决方案1】:

一起删除连接。 Express 4 是一个大修,它删除了 connect 作为依赖项。删除所有需要/调用连接的部分。同时更新所有依赖项。

根据 express-session 中间件模块的文档: name - cookie name (formerly known as key). (default: 'connect.sid')

不要传递任何东西,它会使用 express sid。我已经复制了您的代码并在没有连接的情况下对其进行了测试,但我没有收到这些错误。此外,我已将 resave 键添加到 session 配置对象以使不推荐使用的警告静音(如果您运行的是最新的 express 4 版本)。

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

【讨论】:

  • @Seth 这段代码做了什么?resave: false, saveUninitialized: true, cookie: { secure: true, maxAge: new Date(Date.now() + 3600000) }
  • @user7350714 您可以在他们的 README.md - github.com/expressjs/session 中找到问题的答案。
【解决方案2】:

首先将您的节点版本更新到最新版本:

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

更新所有依赖包:

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

如果需要

npm audit fix

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 2016-04-20
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多