Express 4.0,带有奇怪警告消息的express-session

106

我正在尝试使用Express 4.x设置Node.js应用程序。在解决中间件删除问题后,我终于让它正常工作了。

但是,在下面的代码行中出现了一些警告消息:

app.use(session({secret: '<mysecret>'})

这些警告是:

Sun, 29 Jun 2014 12:45:10 GMT express-session deprecated pass resave option; default value will change at lib\config\express.js:55:11

Sun, 29 Jun 2014 12:45:10 GMT express-session deprecated pass saveUninitialized option; default value will change at lib\config\express.js:55:11

在文档中,resave和saveUninitialized的默认值为true。

因此,更改代码以阅读

app.use(session({secret: '<mysecret>', 
                 saveUninitialized: true,
                 resave: true}));

解决了警告问题。

那么,回到问题的重点:

如果这些值是默认值,为什么我还需要传递它们?而我为什么不必传递其他选项?


1
因为这些默认值会发生变化,当它们发生变化时,通过显式地将它们传递给中间件,您可以避免可能导致的错误。 - soulcheck
13
我喜欢它们在帮助你的同时,又不会告诉你默认选项是什么。 - Brade
4
resavesaveUninitialized 都是布尔值,默认情况下在1.7.2中为 true。链接:https://github.com/expressjs/session - cfs
1
@cfs:应该是saveUninitialized。我复制了你发布的内容,浪费了45分钟来弄清楚为什么警告不会消失。后来我意识到有一个拼写错误。哈哈:D - AdityaParab
1
抱歉浪费你的时间,Maverick :) 不幸的是,这个评论对我来说太旧了,否则我会修正我的错别字 :/ - cfs
在盲目地将这些值设置为true/false之前,您应该咨询您正在使用的驱动程序,以了解它们如何处理这些设置。对于使用connect-mongo的人,请参见此处https://github.com/kcbanner/connect-mongo#lazy-session-update - Paul Schwarz
4个回答

67

正如警告所说,缺省值将会更改,因此他们希望通过现在明确设置这些值来确保当默认值在不久的将来更改时,您不会遇到意外行为。


哦,所以这两个参数的默认值会在某个时候改变?这样就合理多了!谢谢。 - jmls
3
传说,它仍将很快改变 :) - Qcom
2
来自未来。很快就会改变 :) - comphonia

55

1
感谢您以代码形式回答问题...在这里很少看到这样的回答。 - Dave
2
很好。我建议您查看文档。在我的情况下,最好将它们设置为“false”(https://github.com/expressjs/session#resave,https://github.com/expressjs/session#saveuninitialized)。 - juanra

5

我没有足够的声望来添加这条评论。我添加了这个作为Ben答案的默认值。

secret: process.env.SESSION_SECRET || '<mysecret>',

2
app.use(session({
  cookieName: 'session',
  secret: 'eg[isfd-8yF9-7w2315df{}+Ijsli;;to8',
  duration: 30 * 60 * 1000,
  activeDuration: 5 * 60 * 1000,
  httpOnly: true,
  secure: true,
  ephemeral: true,
  resave: true,
  saveUninitialized: true
}));

对我来说可以工作,也许会话只需要一些额外的设置。谢谢。 - martinhajny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接